版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN_fzs/article/details/82115403
一、缺失数据
pandas中使用浮点值NaN(Not a Number)来表示浮点或非浮点数组中的缺失数据。
pandas as pd
import numpy as np
from pandas import Series,DataFrame
data = Series(['a','b',np.NAN,'d'])
data
#输出:
0 a
1 b
2 NaN
3 d
dtype: object
data.isnull()
#输出
0 False
1 False
2 True
3 False
dtype: bool
data.notnull()
#输出
0 True
1 True
2 False
3 True
dtype: bool
python中None值也会被当作缺失值,做NA处理
data[0] = None
data
#输出
0 None
1 b
2 NaN
3 d
dtype: object
二、过滤缺失值
对于一个Series,可以利用dropna()返回非空数据和索引值的Series
from numpy import nan as NA
data = Series([1,NA,5,NA,9])
data.dropna()
#输出:
0 1.0
2 5.0
4 9.0
dtype: float64
#也可以布尔索引方法:
data[data.notnull()]
#输出
0 1.0
2 5.0
4 9.0
dtype: float64
对于DataFrame对象来说,dropna默认丢弃任何含有缺失值的行
data = DataFrame([[1,2,3],[4,NA,NA],
[NA,NA,NA],[NA,11,12]])
data
#输出
0 1 2
0 1.0 2.0 3.0
1 4.0 NaN NaN
2 NaN NaN NaN
3 NaN 11.0 12.0
data.dropna()
#输出
0 1 2
0 1.0 2.0 3.0
利用how='all'过滤掉全为NA的行
data.dropna(how='all')
#输出
0 1 2
0 1.0 2.0 3.0
1 4.0 NaN NaN
3 NaN 11.0 12.0
用这种方式,再加上一个axis=1即可过滤掉全为NA的列
data[4]=NA
data
#输出
0 1 2 4
0 1.0 2.0 3.0 NaN
1 4.0 NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN 11.0 12.0 NaN
data.dropna(axis=1,how='all')
#输出
0 1 2
0 1.0 2.0 3.0
1 4.0 NaN NaN
2 NaN NaN NaN
3 NaN 11.0 12.0
还可以通过thresh参数实现过滤,留下一部分观测数据,thresh为非NaN值的最少个数
df = DataFrame(np.random.randn(7,3))
df.ix[1:3,0] = NA;df.ix[1:2,2] = NA
df
#输出
0 1 2
0 -1.313231 -1.241962 -1.885440
1 NaN -0.153630 NaN
2 NaN -0.678547 NaN
3 NaN 0.875522 -1.614373
4 0.188576 -2.019324 0.718871
5 -0.468703 0.312403 -1.711713
6 -0.622145 0.450063 -0.309250
df.dropna(thresh=3
#输出
0 1 2
0 0.266983 0.519448 -1.162884
4 -0.973283 0.087619 0.992987
5 0.931693 0.766414 -1.183372
6 0.338726 0.738586 0.326401
三、填充数据
在大多数情况下,使用fillna方法来填充缺失数据
df.fillna(0) #填充全为0的数据
#输出
0 1 2
0 0.217111 -0.220653 -0.326984
1 0.000000 -0.120254 0.000000
2 0.000000 -0.695810 0.000000
3 0.000000 0.162947 0.054661
4 0.346839 0.403216 -0.059382
5 -0.389539 -1.013111 1.296135
6 0.746627 0.110324 -0.278191
也可以用过字典调用fillna,对不同列填充不同的值
df.fillna({0:0,2:1})
#输出
0 1 2
0 0.217111 -0.220653 -0.326984
1 0.000000 -0.120254 1.000000
2 0.000000 -0.695810 1.000000
3 0.000000 0.162947 0.054661
4 0.346839 0.403216 -0.059382
5 -0.389539 -1.013111 1.296135
6 0.746627 0.110324 -0.278191
还可以使用method参数填充:’ffill’或’pad 值前向填充,’bfill’或’backfill 后向填充
df.fillna(method = 'ffill')
#输出
0 1 2
0 0.217111 -0.220653 -0.326984
1 0.217111 -0.120254 -0.326984
2 0.217111 -0.695810 -0.326984
3 0.217111 0.162947 0.054661
4 0.346839 0.403216 -0.059382
5 -0.389539 -1.013111 1.296135
6 0.746627 0.110324 -0.278191
df.fillna(method = 'bfill')
#输出
0 1 2
0 0.217111 -0.220653 -0.326984
1 0.346839 -0.120254 0.054661
2 0.346839 -0.695810 0.054661
3 0.346839 0.162947 0.054661
4 0.346839 0.403216 -0.059382
5 -0.389539 -1.013111 1.296135
6 0.746627 0.110324 -0.278191
fillna可以实现很多功能,比如用平均值填充
扫描二维码关注公众号,回复:
2930995 查看本文章
data = Series([1,NA,3,NA,7])
data.fillna(data.mean())
#输出
0 1.000000
1 3.666667
2 3.000000
3 3.666667
4 7.000000
dtype: float64
python数据分析数据分析
大数据 pandas