pandas DataFrame 缺失值处理 (数据预处理)

创建DataFrame数据样例

import pandas as pd
import numpy as np 

df = pd.DataFrame(np.random.rand(3,3),index=[1,3,4,7,9],columns=['a','b','c'])
df = df.reindex(index = range(5))
df

输出结果如下:
在这里插入图片描述

查看各字段是否存在缺失值的几种方法

#查看df中各字段是否存在缺失值
print(df.isna().any())
print("------------")
print(df.isnull().any())
print("------------")
print(np.isnan(df).any())

三种方法输出结果都一样如下:
在这里插入图片描述
还有一种我更喜欢的方法: DataFrame 的 info() 方法:

#用info()方法查看非空值情况  (推荐)
df.info()

输出结果如下:
在这里插入图片描述
输出结果主要看框出来的两部分,从结果可以看出,DataFrame共有5条数据,a、b、c三个字段中的非空数据都只有三个,因此可以判断出每个字段都存在缺失值。

缺失值的处理方法

  • 方法一,用dropna() 方法直接丢弃含有缺失值的数据:
test = df.dropna()
test

在这里插入图片描述
可以看到缺失值含有缺失值的数据被直接丢弃了,在真实的处理任务中,如果缺失值较少,整体数据量又很大时,直接丢弃缺失值对整体的影响不大。

  • 方法二,填充法。可以用某些数值来填充缺失值,如指定用数值0填充,或者是更常用的用前后值填充、均值填充、众数填充等。

用前后值填充:

print(df.fillna(method='ffill'))#用前一个值填充
print(df.fillna(method='backfill'))#用后一个值填充

在这里插入图片描述
用均值填充:

d = pd.DataFrame(np.arange(9).reshape(3,3),index = [0,1,3])
d = d.reindex(index = range(5))
print(d)
print(d.fillna(d.mean()))#每列的均值填充

填充前:
在这里插入图片描述

填充后:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐