系列文章目录:
python数据分析(一)——series和读取外部数据
python数据分析(二)——DataFrame
缺失值处理
一、数据缺失
数据缺失通常有两种情况;
一种就是空,None等,在pandas是NaN(和np.nan一样),另一种是人为赋值为0的数据
对于NaN的数值:
判断数据是否为NaN:pd.isnull(t)或者pd.notnull(t)
判断nan出现情况
In [45]: t
Out[45]:
w x y z
a 0.0 1.0 2 3
b NaN NaN 6 7
c NaN NaN 10 11
In [47]: pd.isnull(t)
Out[47]:
w x y z
a False False False False
b True True False False
c True True False False
In [48]: pd.notnull(t)
Out[48]:
w x y z
a True True True True
b False False True True
c False False True True
In [49]:t[pd.notnull(t["w"])]
Out[49]:
w x y z
a 0.0 1.0 2 3
处理方式一:删除NaN所在的行列
#只要有一个nan就删掉,inplace是否将删掉之后的数组替换掉之前的数组,即原地修改:
dropna(axis=0,how=‘any’,inplace=False)
#这一行全部为nan时删掉:
dropna(axis=0,how=‘all’,inplace=False)
删除数据
In [50]: t.dropna(axis=0,how='any')
Out[50]:
w x y z
a 0.0 1.0 2 3
In [51]: t.dropna(axis=0,how='all')
Out[51]:
w x y z
a 0.0 1.0 2 3
b NaN NaN 6 7
c NaN NaN 10 11
In [52]:
# 原地修改
t.dropna(axis=0,how="any",inplace=True)
In [53]: t
Out[53]:
w x y z
a 0.0 1.0 2 3
处理方式二:填充数据
t.fillna(t.mean()), t.fiallna(t.median()),t.fillna(0)
填充数据
In [60]: t3
Out[60]:
name age tel
0 xiaohong 32 10086.0
1 xiaogang NaN 10000.0
2 xiaowang 22 NaN
In [61]: t3.fillna(0)
Out[61]:
name age tel
0 xiaohong 32 10086.0
1 xiaogang 0 10000.0
2 xiaowang 22 0.0
In [71]:t3 = [{"name":'xiaohong', "age":32, "tel":10010}, {"name":"xiaogang","tel":10000}, {"name":"xiaowang", "age":22}]
In [72]:t3 = pd.DataFrame(t3)
In [73]: t3
Out[73]:
name age tel
0 xiaohong 32.0 10010.0
1 xiaogang NaN 10000.0
2 xiaowang 22.0 NaN
In [74]: t3.mean()
Out[74]:
age 27.0
tel 10005.0
dtype: float64
In [75]: t3.fillna(t3.mean())
Out[75]:
name age tel
0 xiaohong 32.0 10010.0
1 xiaogang 27.0 10000.0
2 xiaowang 22.0 10005.0
# 只对其中某一列操作
In [85]: t3["age"].fillna(t3["age"].mean())
Out[85]:
0 32.0
1 27.0
2 22.0
Name: age, dtype: float64
处理为0的数据:t[t==0]=np.nan
并不是每次为0的数据都需要处理,计算平均值等情况,nan是不参与计算,但是0会