如何在python中使用DataFrame列的模式替换NA值?

时间:2016-11-15 20:50:28

标签: python dataframe

我是Python(和本网站)的新手,我目前正试图用他们的模式替换特定数据帧列中的NA值。我尝试了各种不起作用的方法。请帮我看看我做错了什么:

注意:我使用的所有列都是float64类型。我的所有代码都会运行,但是当我在列中使用df[cols_mode].isnull().sum()检查空值时,它仍保持不变。

方法1:

cols_mode = ['race', 'goal', 'date', 'go_out', 'career_c']

df[cols_mode].apply(lambda x: x.fillna(x.mode, inplace=True))

我也尝试了Imputer方法,但遇到了相同的结果

方法2:

for column in df[['race', 'goal', 'date', 'go_out', 'career_c']]:
    mode = df[column].mode()
    df[column] = df[column].fillna(mode)

方法3:

df['race'].fillna(df.race.mode(), inplace=True)
df['goal'].fillna(df.goal.mode(), inplace=True)
df['date'].fillna(df.date.mode(), inplace=True)
df['go_out'].fillna(df.go_out.mode(), inplace=True)
df['career_c'].fillna(df.career_c.mode(), inplace=True)

方法4: 我的方法变得越来越像一个手动过程,最后这个方法有效:

df['race'].fillna(2.0, inplace=True)
df['goal'].fillna(1.0, inplace=True)
df['date'].fillna(6.0, inplace=True)
df['go_out'].fillna(2.0, inplace=True)
df['career_c'].fillna(2.0, inplace=True) 

3 个答案:

答案 0 :(得分:6)

mode会返回一个系列,因此您仍需要在替换DataFrame中的NaN值之前访问所需的行。

for column in ['race', 'goal', 'date', 'go_out', 'career_c']:
    df[column].fillna(df[column].mode()[0], inplace=True)

如果要将其应用于DataFrame的所有列,则:

for column in df.columns:
    df[column].fillna(df[column].mode()[0], inplace=True)

答案 1 :(得分:0)

或者我使用了另一个仅包含列模式的数据框,但是您需要确保NaN不是任何列的模式

 #Create the Mode Data frame 
    df_mode=df.mode()
#simply using a forloop with object 
    for x in df.columns.values:
        df[x]=df[x].fillna(value=df_mode[x].iloc[0])

您还可以使用就地方法。 这在处理大型数据集时非常有用,我只是创建了一个数据框,其中所有列的均值均值中位数。

答案 2 :(得分:0)

为什么不使用字典作为您的栏目,而是通过字典呢?

dic = {'race': 2.0, 'goal': 1.0, 'date': 6.0, 'go_out': 2.0, 'career_c': 2.0}
df.fillna(value=dic)