You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame列访问方式差异及fillna、replace写法区别咨询

Pandas 数据处理常见问题解答

1. df['column_name'] 与 df.column_name 的区别

  • 列名限制不同:df.column_name只能用在列名是合法Python标识符的场景——比如列名不能有空格、不能以数字开头、不能是class/def这类Python关键字;而df['column_name']没有任何限制,不管列名多复杂(比如"user 1 age")都能正常使用。
  • 动态列名支持不同:如果列名存在变量里(比如col = 'filed_complaint'),只能用df[col]来访问对应列;用df.col的话,程序会去找名为col的列,而不是变量col存储的列名。
  • 场景适配不同:简单合规的列名用df.column_name更简洁,但涉及复杂列名或动态逻辑时,必须用df['column_name']。

2. 各组代码格式的差异分析

第一组 fillna 代码(处理数值列缺失值)

三个代码行的核心差异在于是否修改原DataFrame:

  1. df['filed_complaint'] = df.filed_complaint.fillna(0)
    • 这行是有效修改原数据:fillna(0)默认返回填充后的新Series,赋值操作把这个新Series覆盖原列,原df的filed_complaint列会被更新。
  2. df['filed_complaint'].fillna(0)
    • 仅生成填充后的新Series,但没有保存回原df,原列的缺失值完全没变化,相当于白跑了(除非把结果存到变量里)。
  3. df.filed_complaint.fillna(0)
    • 和第二行逻辑完全一致,只是用属性访问的方式调用fillna,同样不会修改原df,只返回结果。

第二组 fillna 代码(处理字符串列缺失值)

逻辑和第一组完全对应:

  1. df['department'] = df.department.fillna('Missing')
    • 有效更新原df的department列:填充后的新Series覆盖原列,原数据被修改。
  2. df['department'].fillna('Missing')
    • 仅返回填充后的结果,不影响原df,原列的缺失值还在。
  3. df.department.fillna('Missing')
    • 和第二行效果一样,属性访问调用fillna,不修改原数据。

第三组 replace 代码(替换指定值)

这组的差异主要在inplace=True的使用:

  1. df['department'] = df.department.replace('information_technology', 'IT', inplace=True)
    • 这是错误写法:当inplace=True时,replace会直接修改原Series,并且返回None。这行代码相当于把None赋值给df['department'],会把整个列变成空值。
  2. df['department'].replace('information_technology', 'IT', inplace=True)
    • 正确修改原数据:inplace=True让replace直接在原列上执行替换,不需要额外赋值,原department列会被更新。
  3. df.department.replace('information_technology', 'IT', inplace=True)
    • 和第二行效果完全一致,用属性访问方式调用replace,inplace=True直接修改原列,无需赋值。

内容的提问来源于stack exchange,提问作者Ramsey A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:01:20