ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pandas 缺失值处理完整教程:快速识别、定位与填补 NaN、NA、NaT 的实用策略

pandas 缺失值处理完整教程:快速识别、定位与填补 NaN、NA、NaT 的实用策略 pandas 缺失值处理完整教程快速识别、定位与填补 NaN、NA、NaT 的实用策略【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandaspandas 是 Python 最强大的灵活数据分析库提供带标签的数据结构、统计函数与海量 I/O 能力。而真实数据几乎总有空洞缺失的年龄、没填的日期、空白的金额……本教程带你快速掌握 pandas 缺失值处理的核心方法——认识 NaN、NA、NaT 三种哨兵值学会用pd.isna识别、用聚合定位、用fillna等策略填补让新手也能从容处理脏数据。一、先认识三种缺失值NaN、NA 与 NaTpandas 用不同的**哨兵值sentinel**来表示这里没数据它们各司其职哨兵值适用数据类型特点NaN即np.nan普通浮点、object 列最常用整数列出现缺失会被升级为浮点NApd.NA可空类型Int64、Boolean、string、Arrow 类型保持原始类型不丢失参与运算时结果也是 NANaTpd.NaTdatetime64、timedelta64、Period时间类型专门表示无效日期/时间 一个直观例子日期列里缺失的位置会显示为NaT而不是NaN因为日期无法用浮点数表示。None在 object 列中同样会被 pandas 视为缺失。识别这些值统一交给两个函数pd.isna和pd.notna互为取反它们能正确识别上述所有哨兵值以及None。核心实现在 pandas/core/dtypes/missing.py其内部会分派到按数组批量判断的快速路径_isna_arraynotna定义于 pandas/core/dtypes/missing.py。二、识别缺失值用 pd.isna 一眼看穿处理缺失值的第一步是看见它。pd.isna可以直接作用在标量、Series、DataFrame 上返回布尔结果——True 表示该位置是缺失值。import pandas as pd import numpy as np ser pd.Series([pd.Timestamp(2020-01-01), pd.NaT]) pd.isna(ser) # [False, True] df pd.DataFrame({a: [1, None, 3], b: [np.nan, x, y]}) df.isna() # 逐单元格返回 True/False 矩阵 官方文档对这部分有完整的演示与讨论推荐精读doc/source/user_guide/missing_data.rst。常见误区千万不要用来判断缺失值np.nan np.nan返回Falsepd.NA pd.NA返回NA——只有isna才是可靠的照妖镜。三、定位缺失值快速找出空洞在哪里知道有缺失后下一步是定位哪些列缺失多哪一行全空三个技巧快速摸底统计每列缺失个数df.isna().sum()一行命令输出各列缺失计数筛选含缺失的行df[df.isna().any(axis1)]找出任意列缺失的行all(axis1)则只留整行缺失的行直接删除dropna方法支持howany/all、subset只看部分列等参数定义见 pandas/core/generic.pyfillna同处ffill/bfill/interpolate分别在该文件第 7398、7500、8123 行。df.isna().sum() # 各列缺失数量 df.dropna() # 删除任意含缺失的行 df.dropna(howall) # 只删除整行全缺失的行四、填补缺失值fillna 与四大经典策略删除不是唯一答案——多数场景下填补更能保留数据量。pandas 提供了层层递进的工具方法作用适用场景fillna(value)用常量/字典统一填充缺失意义明确如默认值 0、未知ffill()/bfill()前向 / 后向填充时间序列、价格类数据沿用上一个有效值interpolate()线性等方法插值数值型连续数据按邻近值推算limit参数限制填充次数防止长段缺失被一刀切填平⚠️ 特别提醒整数列混入NaN后会自动变成浮点型。如果希望保留整数语义可先convert_dtypes()转为Int64等可空类型此时缺失值即为NA填补逻辑实现在 pandas/core/arrays/masked.py 的fillna中类型全程不丢失。五、避坑清单新手最容易踩的 3 个坑坑 1用df np.nan找缺失 → 结果永远是空。请改用df.isna()。坑 2对pd.NA直接取布尔如if x:会抛TypeError因为缺失值的真假无法判断先isna判断或提前fillna即可。坑 3整数列reindex引入NaN后类型变成float64。若在意精度与类型优先使用可空整数类型如Int64让缺失以NA形式存在。六、小结与延伸阅读一句话总结 pandas 缺失值处理流水线用isna识别 → 用isna().sum()定位 → 用dropna删除或fillna/ffill/interpolate填补。掌握这套组合拳绝大多数脏数据都能迎刃而解。更多细节可查阅官方用户指南doc/source/user_guide/missing_data.rst缺失值判断的实现源码pandas/core/dtypes/missing.py。【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表