如何使用fillna处理缺失值

type
status
date
slug
summary
tags
category
icon
password
网址
作者
标签
文章链接
发布时间
来源
fillna() 是 pandas 库中用于处理缺失数据(NaN 或 None)的核心方法,在数据清洗和预处理阶段起着至关重要的作用,下面是它的基础语法和参数说明。

基本语法格式

参数详解

1. value (填充值)

  • 用于替换缺失值的标量值、字典、Series 或 DataFrame
  • 可以是单一值(如 0),或指定各列不同填充值的字典
示例:

2. method (填充方法)

  • 指定填充方法,不能与 value 同时使用
  • 可选值:
    • 'ffill' 或 'pad': 前向填充,用前面的有效值填充后面的NaN
    • 'bfill' 或 'backfill': 后向填充,用后面的有效值填充前面的NaN
示例:

3. axis (填充轴)

  • 控制填充方向
  • 0 或 'index': 按列填充(默认)
  • 1 或 'columns': 按行填充
示例:

4. inplace (是否原地修改)

  • False (默认): 返回填充后的新对象
  • True: 直接修改原对象,不返回新对象
示例:

5. limit (最大填充数量)

  • 指定连续NaN值的最大填充数量
  • 对于method填充方式特别有用
示例:

6. downcast (向下转换数据类型)

  • 尝试向下转换填充后的数据类型以节省内存
  • 可选值:'infer' 或字典指定

返回值

  • 默认返回填充后的新DataFrame/Series(除非设置inplace=True
  • 保持原对象的索引和列名不变

基本用法

1. 用固定值填充所有缺失值

输出:

2. 不同列用不同值填充

输出:

高级用法

3. 前向填充(ffill)和后向填充(bfill)

4. 限制填充数量

5. 使用统计值填充

6. 对时间序列数据的特殊填充

实际应用技巧

7. 只填充特定条件下的缺失值

8. 分组后填充

9. 原地修改(inplace参数)

注意事项

  1. 使用fillna前最好先用df.isnull().sum()检查缺失值情况
  1. 对于时间序列数据,interpolate()方法通常比简单填充更合适
  1. 填充大量数据时,考虑使用更高效的方法如df.replace()df.update()
  1. 填充后建议检查填充效果,确保没有引入偏差

groupby+fillna的用法

1. 生成模拟公司数据

输出:
 

3. 正确方法演示

全部列进行填充:set_index + groupby(level) + reset_index

输出:
如果直接使用filled_data = data.groupby(["Symbol", "ShortName"]).fillna(method="ffill").reset_index() ,则会输出:
此时, groupby(['Symbol', 'ShortName']) 会让 'Symbol' 和 'ShortName' 成为临时分组键(类似索引),而reset_index() 无法恢复原始列,因为 'Symbol' 和 'ShortName' 已经被 groupby 隐藏了(它们不再是列,而是分组标签)。

限定列进行填充

输出:

  1. 适用场景
      • 金融数据清洗(如填充上市公司坐标)
      • 时间序列数据(按组填充缺失值)
Prev
结合 groupby 和 .transform()
Next
如何读取HDF5文件?
Loading...
Article List
Practice makes perfect
文献集锦
如何理论创新?
管理学理论集锦
Python实际应用
聚类标准误与固定效应
巫师3:狂猎
Stata应用技巧
Python知识与技巧
双重差分法(DID)
创新文献阅读与摘要
计量经济学
Python绘图相关