一、处理缺失值
缺失数据会在很多的数据分析中出现,而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)