基于pandas缺失数据处理

本文详细介绍了在数据分析中如何处理缺失数据,包括过滤和补全缺失值的方法。使用pandas库进行数据清洗,通过dropna和fillna函数实现数据预处理,确保数据质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、处理缺失值

缺失数据会在很多的数据分析中出现,而pandas的目标之一就是尽可能无痛地处理缺失数据值。
对于pandas对象中表现出缺失值并不完整,可是对于大部分用户是可用的。对于数值型数据,pandas使用浮点值NaN,我们称NaN为容易检测到的标识值。

In[1]:string_data=(['asdddf','sddffcs',np.nan,'sddsdcd'])
In[2]:string_data
Out[2]:
0    asdddf
1    sddffcs
2    NaN

注:python内建的None值在对象数组中也被当做NA处理:

In[3]:string_data[0] = None
In[4]:string_data.isnull()
Out[4]:
0     True
1     False
2     True
3     False
dtype: bool

附:

NA处理方法
dropna 根据每个标签的值是否是缺失数据来筛选轴标签,并根据允许丢失的数据量来 确定阈值
fillna 用某些值填充缺失的数据或使用插值方法(如"ffill"或”bfill")
isnull 返回表明哪些值是缺失值的布尔值
notnull isnull的反函数

1.1过滤缺失值

过滤缺失值方法很多,可以使用pandas.isnull和布尔值索引手动地过滤缺失值,但dropna在过滤缺失值时是非常有用的。在series上使用dropna,它会返回series中所有的非空数据及其索引。

In[5]:from numpy import nan as NA
In[6]:data = pd.series([2,NA,5.4,NA,7])
In[7]:data.dropna()
Out[8]:
0     2.0
2     5.4
4     7.0
dtype:float64
#data.drope()可以等价于data[data.notnull()],输出结果也一样。

1.当处理DataFrame对象时,dropna会在默认情况下删除包含缺失值的行。2.当过滤DataFrame的行会涉及时间序列数据,可以使用thersh来表示过滤。

1.2补全缺失值

1.2.1、当数据出现缺失值时,需要进行缺失值的补全,在大多数情况下,主要使用fillna方法来补全缺失值,调用fillna时,可以使用一个常数或“*”来进行补全。
1.2.2、在调用fillna时使用字典,可以为不同列设定不同的值。
1.2.3、当fillna返回的是一个新对象时,可以修改已经存在的对象。
注:用于重建索引的相同的插值方法也可以使用fillna.

附:

fillna函数参数
vaue 标量值或字典型对象用于填充缺失值
method 插值方法,如果没有其他参数,默认是“ffill”
axis 需要填充的轴,默认axis=0
inplace 修改被调用的对象,而不是生成一个备份
limit 用于向前或后向填充时最大的填充范围

1.3实例代码

1,载入数据
2,剔除不完整数据

#encoding:utf8
import matplotlib.pyplot as plt
import numpy as np
f = open("order_info_utf.csv",encoding="gbk")
#order_info_utf.csv为导入的数据集
data = f.read().strip().split("\n")
f.close()
dataList = [i.split(",") for i in data]
print(len(dataList))
clearData = []
for i in dataList:
    if "" not in i:
        clearData.append(i)
print(len(clearData))

1.载入数据;
2.清理缺失数据;

#encodin:utf8
import numpy as np
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
f = open("user_info_utf.csv",encoding="utf8")
data = f.read().strip().split("\n")
f.close()
dataList = [i.split(",") for i in data]

clearData = []
for i in dataList:
    if "" not in i:
        clearData.append(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值