处理缺失数据
创建一个含缺失值的Series
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
string_data.isnull()
通过isnull方法返回一个布尔型Series,缺失值显示为True。
通过索引可以将非缺失值设置为缺失值
string_data[0] = None
处理缺失数据的函数
dropna,除去缺失数据
fillna,用指定值填充缺失值
isnull,返回布尔型对象,缺失值显示True,其他显示False
notnull,isnull的否定式
滤除缺失数据
from numpy import nan as NA #从numpy模块中可以引入缺失值。
data = pd.Series([1,NA,3.5,NA,7]) #创建含缺失值的Series
data.dropna() #去除Series中的缺失值
data[data.notnull()] #与data.dropna()等价
对DataFrame对象,dropna方法默认丢弃所有含有缺失值的行。
data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA],
[NA, NA, NA], [NA, 6.5, 3.]])
cleaned = data.dropna()
传入参数how='all'则只除去整行都是NA的行。
cleaned = data.dropna(how='all')
传入参数axis=1或者axis='columns'则会改为逐列删除。
data = pd.DataFrame([[1., NA, 3.], [1., NA, NA],
[2, NA, NA], [3, NA, 3.]])
cleaned = data.dropna(axis=1)
cleaned2 = data.dropna(axis=1,how='all')
dropna的thresh参数,如设置thresh=2,表示如果某行至少有2个非缺失值时将该行保留下来
df = pd.DataFrame(np.random.randn(7,3)) #创建一个7行3列的DataFrame
df.iloc[:4,1] = NA #将数据框列1的前四行设置为缺失值
df.iloc[:2,2] = NA #将数据框列2的前两行设置为缺失值
df.dropna(thresh=2) #行数据有两个及以上非缺失值时将保留该行
df.dropna(thresh=3) #行数据有三个及以上非缺失值时将保留该行
填充缺失数据
Series和DataFrame都有fillna方法可以填充缺失数据
df.fillna(0)
fillna()方法可以传入字典,实现对不同列的缺失值用不同的值进行填充
df.fillna({1:0.5,2:0}) #列1的缺失值用0.5来填充,列2的缺失值用0来填充
若传入inplace=True参数,则可以实现就地修改(慎用)
df.fillna(0,inplace=True)
fillna传入method='ffill'参数,缺失值会以上方非缺失值为参数进行填充。
df = pd.DataFrame(np.random.randn(6, 3))
df.iloc[2:, 1] = NA
df.iloc[4:, 2] = NA
df.fillna(method='ffill')
传入limit参数可以限制填充缺失值数量。
df.fillna(method='ffill',limit=2) #限制一列只能填充两个缺失值
可以利用fillna实现许多别的功能,如用平均值来填充缺失值。
data = pd.Series([1,NA,3.5,NA,7])
data.fillna(data.mean())
fillna的参数:value、method、axis、inplace、limit
<