簡體   English   中英

如何用 python 中的 DataFrame 列的模式替換 NA 值?

[英]How to replace NA values with mode of a DataFrame column in python?

我對 Python(和本網站)完全陌生,目前正在嘗試用其模式替換特定 dataframe 列中的 NA 值。 我嘗試了各種無效的方法。 請幫助我發現我做錯了什么:

注意:我使用的所有列都是float64類型。 我所有的代碼都運行但是當我在列中使用df[cols_mode].isnull().sum()檢查 null 數量時,它保持不變。

方法一:

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

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

我也嘗試了 Imputer 方法但遇到了相同的結果

方法二:

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返回一個系列,因此在替換 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)

或者,我使用了另一個僅包含列模式的數據框,但是您需要確保 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)

對於單列插補

df['col'] = df['col'].fillna(df['col'].mode()[0])

如果你想將相同的應用到列列表然后循環它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM