Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何用DataFrame列的模式替换NA值?_Python_Dataframe - Fatal编程技术网

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

在python中,如何用DataFrame列的模式替换NA值?,python,dataframe,Python,Dataframe,我对Python(和这个网站)完全陌生,目前正在尝试用模式替换特定dataframe列中的NA值。我尝试过各种不起作用的方法。请帮我找出我做错了什么: 注意:我使用的所有列都是float64类型。我所有的代码都会运行,但当我在列中使用df[cols\u mode].isnull().sum()检查空值时,它保持不变 方法1: cols_mode = ['race', 'goal', 'date', 'go_out', 'career_c'] df[cols_mode].apply(lambda

我对Python(和这个网站)完全陌生,目前正在尝试用模式替换特定dataframe列中的NA值。我尝试过各种不起作用的方法。请帮我找出我做错了什么:

注意:我使用的所有列都是
float64
类型。我所有的代码都会运行,但当我在列中使用
df[cols\u 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))
我也尝试了插补方法,但也遇到了同样的结果

方法2:

for column in df[['race', 'goal', 'date', 'go_out', 'career_c']]:
    mode = df[column].mode()
    df[column] = df[column].fillna(mode)
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)
方法3:

for column in df[['race', 'goal', 'date', 'go_out', 'career_c']]:
    mode = df[column].mode()
    df[column] = df[column].fillna(mode)
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) 

mode
返回一个序列,因此在替换数据帧中的
NaN
值之前,仍然需要访问所需的行

for column in ['race', 'goal', 'date', 'go_out', 'career_c']:
    df[column].fillna(df[column].mode()[0], inplace=True)
如果要将其应用于数据帧的所有列,则:

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

或者,我使用了另一个仅包含列模式的数据框,但是您需要确保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])
也可以使用就地方法。
这在处理大型数据集时非常有用。我只是为所有列创建了一个包含所有平均模式中位数的数据框。

为什么不为您的列使用字典并传递它呢

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

你看过替换方法了吗?
方法2有什么问题?@MaxU方法2返回错误<代码>模式
返回序列,而不是单个值。