[英]How to replace 0 with "NA" and all other values to 0 in Python DataFrame?
[英]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.