python数据分析(三)——pandas缺失值处理

系列文章目录
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会

你可能感兴趣的:(pandas,python,数据分析)