Python pandas fillna方法实现部分自动填充功能详解
本文介绍如何利用Python pandas库中的fillna方法处理数据缺失值。通过value参数指定具体填充数值,利用method参数(ffill/bfill)控制前后向自动填充方向,并结合limit参数限制最大填充行数。文章包含读取Excel、字典映射填充及限制填充行数的完整代码示例,帮助开发者高效完成数据清洗任务。
利用fillna处理缺失值
在数据处理过程中,经常遇到包含 NaN(Not a Number)的数据集。pandas 提供了 fillna 方法,用于识别并填充这些缺失值。该方法主要依赖三个核心参数:value、method 和 limit,分别用于指定填充的具体数值、控制自动填充的方向以及限制填充的最大行数。
基础填充:指定具体数值
最直接的方式是使用 value 参数,将所有的 NaN 替换为指定的固定值。例如,将缺失值全部填充为 0:
>>> df = pd.read_excel(r'D:/myExcel/1.xlsx') >>> df name Chinese Chinese.1 id 0 bob 12.0 12 123.0 1 millor NaN 32 124.0 2 jiken 89.0 89 NaN 3 jiken 89.0 89 125.0 # 默认将所有值均填充为0 >>> df.fillna(0) name Chinese Chinese.1 id 0 bob 12.0 12 123.0 1 millor 0.0 32 124.0 2 jiken 89.0 89 0.0 3 jiken 89.0 89 125.0
若不同列需要不同的填充值,可以传入一个字典。字典的键为列名,值为对应的填充数:
# 也可以通过字典控制每列传什么值
>>> my_dict = {'Chinese' : 92, 'id' : 98}
>>> df.fillna(my_dict)
name Chinese Chinese.1 id
0 bob 12.0 12 123.0
1 millor 92.0 32 124.0
2 jiken 89.0 89 98.0
3 jiken 89.0 89 125.0自动填充:控制填充方向
当 value 参数未指定时,可以使用 method 参数进行前后向填充。该参数默认值为 None,即不自动填充。
- 向下填充(ffill/pad):使用
'ffill'或'pad',用前一个非空值填充当前的NaN。 - 向上填充(bfill/backfill):使用
'bfill'或'backfill',用后一个非空值填充当前的NaN。
以下是向下和向上填充的示例:
# 向下 >>> df.fillna(method='ffill') name Chinese Chinese.1 id 0 bob 12.0 12 123.0 1 millor 12.0 32 124.0 2 jiken 89.0 89 124.0 3 jiken 89.0 89 125.0 # 向上 >>> df.fillna(method='bfill') name Chinese Chinese.1 id 0 bob 12.0 12 123.0 1 millor 89.0 32 124.0 2 jiken 89.0 89 125.0 3 jiken 89.0 89 125.0
限制填充行数
在实际场景中,可能不希望无限向下或向上填充。此时可以使用 limit 参数,限制自动填充的最大连续行数。例如,限制向上填充最多只填充 1 行:
# 限制自动填充最大填充1行。 >>> df.fillna(method = 'bfill', limit=1) name Chinese Chinese.1 id 0 bob 12.0 12 123.0 1 millor 89.0 32 124.0 2 jiken 89.0 89 125.0 3 jiken 89.0 89 125.0
验证缺失值
在填充前或填充后,可以使用 isna() 方法检查数据集中哪些位置仍为缺失值。该方法返回一个布尔型 DataFrame,True 表示该位置为 NaN,False 表示有值:
>>> df.isna() name Chinese Chinese.1 id 0 False False False False 1 False True False False 2 False False False True 3 False False False False
以上就是利用pandas fillna方法实现部分自动填充功能的详细内容,更多关于Python pandas数据清洗的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













