对于数据科学来说,Python 中最重要的库是什么?有些人可能认为是 scikit-learn,它提供了许多内置函数用于机器学习任务。部分人可能会选择 NumPy 进行数值运算。
但我还是支持 Pandas。为什么?如果你不使用它的功能,你的操作可能会寸步难行。Pandas 非常庞大,需要学习的东西很多。
在本文中,云朵君将分享五个鲜为人知的 Pandas 技巧。这些技巧初时对我来说非常新颖,需要经过大量研究才能掌握。强烈推荐关注@公众号:数据 STUDIO ,更多精选好文定期更新!
pipe()
方法链.pipe()
方法链可以使代码更简洁、更高效。使用.pipe()
,可以在一行中应用多个操作。
下面,我们将筛选市场价值高于 1,000,000 欧元的球员数据,并按排序market_value_in_eur
,找出世界上最昂贵的球员。
# 这个 transfermarkt 数据集来自 Kaggle(https://www.kaggle.com/datasets/davidcariboo/player-scores)
def filter_high_value_players ( df ):
return df[df[ 'market_value_in_eur' ] > 1000000 ]
def sort_by_market_value ( df ):
return df.sort_values( 'market_value_in_eur' , accending= False )
# 使用 .pipe() 进行方法链
filtered_sorted_df = df.pipe(filter_high_value_players).pipe(sort_by_market_value)
query()
简化过滤该query()
方法使得过滤数据帧更加容易。无需使用长条件,query()
使代码更具可读性。
在这里,我们尝试寻找身价 5000 万欧元且身高超过 185 岁的足球运动员。
high_value_players_2022 = df2.query("market_value_in_eur > 50000000 和 height_in_cm == 185")
high_value_players_2022.head(5)
eval()
加速计算该eval()
函数可以为算术运算提速,特别是对于列式计算非常有用。
# 使用 eval() 计算百万市值
df[ 'market_value_in_millions' ] = df.eval ( 'market_value_in_eur / 1_000_000' )
# 删除 na df.dropna (
subset=[ 'market_value_in_millions' ], inplace= True )
# 从最高到最低升序
df.sort_values( "market_value_in_millions" , accending = False )[[ "name" , "market_value_in_millions" ]]
astype()
优化数据类型将列转换为Categorical
数据类型可以节省内存并加快操作,并且如果在为机器学习算法处理数据时,这是该方法将是你最佳选择。
# 将 'player_club_domestic_competition_id' 转换为分类
df [ 'player_club_domestic_competition_id' ] = df [ 'player_club_domestic_competition_id' ].astype( 'category' )
assign()
临时添加列对于于临时更改数据列,可以使用assign()
方法添加新列而不修改原始数据。
在这里可以看到球员的价值是否高于平均水平。
# 使用assign()添加一列,表示市场价值是否高于平均水平
df_with_new_col = df.assign(above_average = df[ 'market_value_in_millions' ] > df[ 'market_value_in_millions' ].mean())
df_with_new_col.head()
长按👇关注- 数据STUDIO -设为星标,干货速递