news 2026/4/25 12:10:18

Python数据分析和数据处理库Pandas(缺失值处理函数)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python数据分析和数据处理库Pandas(缺失值处理函数)

目录

一.pandas中的缺失值

二.加载数据中包含缺失值

三.查看缺失值

1.通过isnull()查看缺失值数量

2.通过 missingno 条形图展示缺失值

3.通过热力图查看缺失值的相关性

四.剔除缺失值

1.Series剔除缺失值

2.DataFrame剔除缺失值

五.填充缺失值

1.使用固定值填充

2.使用统计值填充

3.使用前后的有效值填充

4.通过线性插值填充


一.pandas中的缺失值

pandas使用浮点值NaN(Not a Number)表示缺失数据,使用NA(Not Available)表示缺失值。可以通过isnull()、isna()或notnull()、notna()方法判断某个值是否为缺失值。

Nan通常表示一个无效的或未定义的数字值,是浮点数的一种特殊取值,用于表示那些不能表示为正常数字的情况,如0/0∞-∞等数学运算的结果。nan与任何值(包括它自身)进行比较的结果都为False。例如在 Python 中,nan == nan返回False。

NA一般用于表示数据不可用或缺失的情况,它的含义更侧重于数据在某种上下文中是缺失或不存在的,不一定特指数字类型的缺失。

na和nan都用于表示缺失值,但nan更强调是数值计算中的特殊值,而na更强调数据的可用性或存在性

import pandas as pd import numpy as np s = pd.Series([np.nan, None, pd.NA]) print(s) print("-----------------") print(s.isnull())

运行结果:

二.加载数据中包含缺失值

import pandas as pd df = pd.read_csv("data/weather_withna.csv") print(df.tail(5))

运行结果:

可以通过keep_default_na参数设置是否将空白值设置为缺失值。

import pandas as pd df = pd.read_csv("data/weather_withna.csv", keep_default_na=False) print(df.tail(5))

运行结果:

可通过na_values参数将指定值设置为缺失值。

import pandas as pd df = pd.read_csv("data/weather_withna.csv", na_values=["2015-12-31"]) print(df.tail(5))

运行结果:

三.查看缺失值

1.通过isnull()查看缺失值数量

import pandas as pd df = pd.read_csv("data/weather_withna.csv") print(df.isnull().sum())

运行结果:

2.通过 missingno 条形图展示缺失值

先安装missingno包:

pip install missingno
import pandas as pd import missingno as msno import matplotlib.pyplot as plt df = pd.read_csv("data/weather_withna.csv") msno.bar(df) plt.show()

运行结果:

3.通过热力图查看缺失值的相关性

missingno绘制的热力图能够展示数据集中不同列的缺失值之间的相关性。这里的相关性体现的是当某一列出现缺失值时,其他列出现缺失值的可能性。如果两个列的缺失值呈现正相关,意味着当其中一列有缺失值时,另一列也很可能有缺失值;若为负相关,则表示当一列有缺失值时,另一列更倾向于没有缺失值。

  • 颜色与数值:热力图中的颜色和数值反映了列之间缺失值的相关性。接近 1 表示正相关,接近 -1 表示负相关,接近 0 则表示缺失值之间没有明显的关联。
  • 示例说明:假如 A 列和 B 列在热力图中对应区域颜色较深且数值接近 1,这就表明当 A 列出现缺失值时,B 列也很可能出现缺失值;若数值接近 -1,情况则相反。
import pandas as pd import missingno as msno import matplotlib.pyplot as plt df = pd.read_csv("data/weather_withna.csv") # msno.bar(df) msno.heatmap(df) plt.show()

运行结果:

四.剔除缺失值

通过dropna()方法来剔除缺失值。

1.Series剔除缺失值

import pandas as pd import numpy as np s = pd.Series([1, pd.NA, None]) print(s) print("-----------------") print(s.dropna())

运行结果:

2.DataFrame剔除缺失值

无法从DataFrame中单独剔除一个值,只能剔除缺失值所在的整行或整列。默认情况下,dropna()会剔除任何包含缺失值的整行数据。

import pandas as pd df = pd.DataFrame([[1, pd.NA, 2], [2, 3, 5], [pd.NA, 4, 6]]) print(df) print("--------------------") print(df.dropna())

运行结果:

可以设置按不同的坐标轴剔除缺失值,比如axis=1(或 axis='columns')会剔除任何包含缺失值的整列数据。

import pandas as pd df = pd.DataFrame([[1, pd.NA, 2], [2, 3, 5], [pd.NA, 4, 6]]) print(df) print("--------------------") print(df.dropna(axis=1))

运行结果:

有时只需要剔除全部是缺失值的行或列,或者绝大多数是缺失值的行或列。这些需求可以通过设置how或thresh参数来满足,它们可以设置剔除行或列缺失值的数量阈值。

import pandas as pd df = pd.DataFrame([[1, pd.NA, 2], [pd.NA, pd.NA, 5], [pd.NA, pd.NA, pd.NA]]) print(df) print("--------------------") print(df.dropna(how="all")) # 如果所有值都是缺失值,则删除这一行 print("--------------------") print(df.dropna(thresh=2)) # 如果至少有2个值不是缺失值,则保留这一行

运行结果:

可以通过设置subset参数来设置某一列有缺失值则进行剔除。

import pandas as pd import numpy as np df = pd.DataFrame([[1, pd.NA, 2], [pd.NA, pd.NA, 5], [pd.NA, pd.NA, pd.NA]]) print(df) print("--------------------") print(df.dropna(subset=[0])) # 如果0列有缺失值,则删除这一行

运行结果:

五.填充缺失值

1.使用固定值填充

import pandas as pd df = pd.read_csv("data/weather_withna.csv") print(df.fillna(0).tail()) # 使用固定值填充

运行结果:

import pandas as pd df = pd.read_csv("data/weather_withna.csv") print(df.fillna({"temp_max": 60, "temp_min": -60}).tail()) # 使用字典来填充

运行结果:

2.使用统计值填充

通过fillna()方法,传入统计后的值进行填充。

import pandas as pd import numpy as np df = pd.read_csv("data/weather_withna.csv") # 使用平均值填充 print(df.fillna(df[["precipitation", "temp_max", "temp_min", "wind"]].mean()).tail())

运行结果:

3.使用前后的有效值填充

通过ffill()或bfill()方法使用前面或后面的有效值填充。

import pandas as pd df = pd.read_csv("data/weather_withna.csv") print(df.ffill().tail()) # 使用前面的有效值填充 print("-------------------") print(df.bfill().tail()) # 使用后面的有效值填充

运行结果:

4.通过线性插值填充

通过interpolate()方法进行线性插值填充。线性插值操作,就是用于在已知数据点之间估算未知数据点的值。interpolate 方法支持多种插值方法,可通过 method 参数指定,常见的方法有:

  • 'linear':线性插值,基于两点之间的直线来估算缺失值,适用于数据呈线性变化的情况。
  • 'time':适用于时间序列数据,会考虑时间间隔进行插值。
  • 'polynomial':多项式插值,通过拟合多项式曲线来估算缺失值,可通过 order 参数指定多项式的阶数。(暂时了解即可)
import pandas as pd import numpy as np # 创建包含缺失值的 Series s = pd.Series([1, np.nan, 3, 4, np.nan, 6]) # 使用默认的线性插值方法填充缺失值 s_interpolated = s.interpolate() print(s_interpolated)

运行结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 12:09:22

打造专属方块世界:PCL启动器全方位配置与优化指南

打造专属方块世界:PCL启动器全方位配置与优化指南 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL Plain Craft Launcher(简称PCL)是一款…

作者头像 李华
网站建设 2026/4/25 12:07:04

告别“白板”DSP:手把手教你用Visual DSP++ 5.1.2为BF533目标板克隆固件(从仿真器连接到HEX文件保存)

嵌入式工程师必备:Visual DSP 5.1.2固件克隆全流程实战指南 在嵌入式系统维护和小批量生产中,经常会遇到需要从已编程的DSP芯片中提取固件的情况。无论是为了维修替换、版本归档还是生产测试,掌握可靠的固件克隆技术都至关重要。本文将手把手…

作者头像 李华
网站建设 2026/4/25 12:06:13

从定时断网到全网泛洪:一次由STP TC风暴引发的工业网络故障深度剖析

1. 凌晨2点的神秘断网事件 去年我接手了一个棘手的工业网络故障案例:某大型制造企业的生产线每天凌晨2点准时断网10分钟,工控系统无法自动恢复,必须人工干预。这种定时炸弹般的故障持续了一个多月,客户的生产排期被彻底打乱。 最诡…

作者头像 李华