使用fillna()函数填充缺失值
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(7,4))
df.loc[:4,1] = np.nan
df.loc[:2,2] = np.nan
df.loc[0,:] = np.nan
df
'''
0 1 2 3
0 NaN NaN NaN NaN
1 -1.198558 NaN NaN 0.227038
2 0.569026 NaN NaN -0.685095
3 -1.349993 NaN -1.715748 -0.345816
4 -1.324344 NaN 0.755861 -0.003945
5 -1.089520 0.999640 -1.011059 1.030057
6 0.578654 -0.003776 0.820553 -2.133620
'''
# 用一个数字填充缺失值
df.fillna(0)
# 用前一个数据代替缺失值:method='pad';用后一个数据代替缺失值:method='bfill'
df.fillna(method = 'bfill')
# 用一个字符串代替缺失值
df.fillna('unknown')
# 使用描述性统计的值代替缺失值,例如使用平均值代替缺失数据
df.fillna(df.mean())
根据不同的列进行缺失值处理
# 使用字典调用fillna,可以实现对不同的列填充不同的值
df.fillna({1:0.5,3:-1})
'''
0 1 2 3
0 NaN 0.500000 NaN -1.000000
1 -1.198558 0.500000 NaN 0.227038
2 0.569026 0.500000 NaN -0.685095
3 -1.349993 0.500000 -1.715748 -0.345816
4 -1.324344 0.500000 0.755861 -0.003945
5 -1.089520 0.999640 -1.011059 1.030057
6 0.578654 -0.003776 0.820553 -2.133620
'''
# 选择对哪些列进行缺失值的处理
df.fillna(df.mean()[:2])
# 用limit限制每列可以替代缺失值的最大数目
df.fillna('unknown',limit = 1)
fillna默认返回新对象,可以使用inplace参数实现对现有对象进行直接修改
# inplace参数:修改调用者对象而不产生副本
_ = df.fillna(0,inplace=True)
df
'''
0 1 2 3
0 0.000000 0.000000 0.000000 0.000000
1 -1.198558 0.000000 0.000000 0.227038
2 0.569026 0.000000 0.000000 -0.685095
3 -1.349993 0.000000 -1.715748 -0.345816
4 -1.324344 0.000000 0.755861 -0.003945
5 -1.089520 0.999640 -1.011059 1.030057
6 0.578654 -0.003776 0.820553 -2.133620
'''