Pandas中直接访问列与带参数方法调用的区别及使用准则
Pandas两种调用方式的区分指南
核心逻辑
一句话区分:看你调用的是DataFrame对象的方法,还是单列(Series对象)的方法:
- 若方法属于DataFrame,需直接在
df上调用,把目标列名作为参数传入,比如df.explode('column') - 若方法属于Series,要先通过
df.column拿到单列数据,再调用该方法,比如df.column.sum()
具体场景拆解
1. 先取列再调用:Series专属方法
这类方法只针对单列数据生效,常见场景包括:
- 统计计算:
df.price.sum()、df.score.mean()、df.quantity.max() - 数据类型专属操作:字符串列的
df.name.str.upper()、日期列的df.order_date.dt.month - 单值处理:
df.age.fillna(20)、df.status.replace({'Y':1, 'N':0})
2. 直接调用:DataFrame专属方法
这类方法是对整个DataFrame的结构或多列进行操作,必须指定目标列作为参数,常见场景包括:
- 结构转换:
df.explode('tags')(展开列中的列表/元组)、df.melt(id_vars='id', value_vars=['a','b'])(宽表转长表) - 分组聚合:
df.groupby('category').sum()(按指定列分组后计算) - 列名操作:
df.rename(columns={'old_col':'new_col'}) - 透视表生成:
df.pivot_table(index='region', values='sales', aggfunc='sum')
避坑提示
- 别写
df.column.explode():explode是DataFrame的方法,Series没有这个方法(部分新版本Pandas虽有,但逻辑和DataFrame的explode完全不同,容易出错) - 优先用Series方法做单列统计:比如
df.sales.sum()比df.sum('sales')更直观,后者是DataFrame的求和方法,默认按列计算,指定列参数虽能运行,但可读性差
内容的提问来源于stack exchange,提问作者Ernest Au
相关产品推荐
相关产品推荐

