pandas处理丢失数据-【老鱼学pandas】

假设我们的数据集中有缺失值,该如何进行处理呢?

丢弃缺失值的行或列

首先我们定义了数据集的缺失值:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

这里缺失值用np.nan来设置,输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23

丢弃缺失值数据

可以使用dropna函数把拥有缺失值数据的行或列进行丢弃。
我们这里以丢弃掉拥有缺失值行作为例子:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

print("处理结果:")
print(data.dropna(axis=0))

输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
             A     B     C   D
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23

这样把拥有NaN的2017-01-08和2017-01-09行给丢弃掉了。
dropna所拥有的参数有:
axis:0=按行进行删除,1=按列进行删除
how:'all'=丢掉全为NaN的行,'any'=丢弃只要此行中出现一个NaN的字段就丢弃

把缺失值替换成其它值

在处理缺失值时,我们也可以把缺失值替换成其它值,具体是通过使用fillna函数来实现的。
比如,我们想把缺失值设置成-1:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

ret = data.fillna(-1)
print("处理结果:")
print(ret)


输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
             A     B     C   D
2017-01-08   0  -1.0   2.0   3
2017-01-09   4   5.0  -1.0   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23

检查是否存在缺失数据

isnull()函数用来检查是否存在缺失值,如果存在缺失值,则对应位置就会显示True:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

ret = data.isnull()
print("处理结果:")
print(ret)

输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
                A      B      C      D
2017-01-08  False   True  False  False
2017-01-09  False  False   True  False
2017-01-10  False  False  False  False
2017-01-11  False  False  False  False
2017-01-12  False  False  False  False
2017-01-13  False  False  False  False

如果我们想要知道整个的数据中是否存在缺失值,例子如下:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

ret = np.any(data.isnull() == True)

print("处理结果:")
print(ret)


输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
True
posted @   dreampursuer  阅读(407)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示