如何在python中用不同的方式填充缺失值?

How to fill missing value with different ways in python?

我有一个数据集,其中包含许多数值变量和许多序数值变量。为了填补缺失值,我想对数值变量使用均值,对序数值变量使用中位数。使用以下代码,它们中的每一个都是单独创建的,而不是收集在数据库中。

df = [['age', 'score'],
 [10,1],
 [20,""],
 ["",0],
 [40,1],
 [50,0],
 ["",3],
 [70,1],
 [80,""],
 [90,0],
[100,1]]

df = pd.DataFrame(data[1:])
df.columns = data[0]

df = df[['age']].fillna(df.mean())
df = df[['score']].fillna(df.median())

首先将空字符串替换为缺失值,然后按列替换缺失值:

df = df.replace('', np.nan)
df['age'] = df['age'].fillna(df['age'].mean())
df['score'] = df['score'].fillna(df['score'].median())

print (df)
     age  score
0   10.0    1.0
1   20.0    1.0
2   57.5    0.0
3   40.0    1.0
4   50.0    0.0
5   57.5    3.0
6   70.0    1.0
7   80.0    1.0
8   90.0    0.0
9  100.0    1.0

你也可以使用DataFrame.agg for Series of aggregate values and pass to DataFrame.fillna:

df = df.replace('', np.nan)

print (df.agg({'age':'mean', 'score':'median'}))
age      57.5
score     1.0
dtype: float64

df = df.fillna(df.agg({'age':'mean', 'score':'median'}))
print (df)
     age  score
0   10.0    1.0
1   20.0    1.0
2   57.5    0.0
3   40.0    1.0
4   50.0    0.0
5   57.5    3.0
6   70.0    1.0
7   80.0    1.0
8   90.0    0.0
9  100.0    1.0

pandas.DataFrame.fillna 接受键为列名的字典,所以你可以这样做:

import pandas as pd
data = [['age', 'score'],
 [10,1],
 [20,None],
 [None,0],
 [40,1],
 [50,0],
 [None,3],
 [70,1],
 [80,None],
 [90,0],
[100,1]]

df = pd.DataFrame(data[1:], columns=data[0])

df = df.fillna({'age':df['age'].mean(),'score':df['score'].median()})
print(df)

输出

     age  score
0   10.0    1.0
1   20.0    1.0
2   57.5    0.0
3   40.0    1.0
4   50.0    0.0
5   57.5    3.0
6   70.0    1.0
7   80.0    1.0
8   90.0    0.0
9  100.0    1.0

请记住,空字符串不同于 NaN,后者可能使用 python 的 None.

创建