我試圖根據某些相應組的中位數來取代年齡的nan值。我用groupby創建了一個名爲grouped_median的表。這是我的代碼:應用函數不會取代數據框中的值
def fillAges(row, grouped_median):
return grouped_median.loc[row['Sex'], row['Class'], row['Title']]['Age']
df['Age'] = df.apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1)
df
如果我只打印這一部分:
print(df.apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1))
值是正確的,但那麼一旦我看DF,楠值不會被替換。我感謝任何幫助。謝謝!編輯:正如Nathaniel所說,這段代碼工作正常。事實上,df是從列車和測試數據集連接起來的一個大數據框,帶有一個額外的「列車」或「測試」標誌列。那麼這就是我在做什麼:
df[df['flag']=='train']['Age'] = df[df['flag']=='train'].apply(lambda x : fillAges(x, grouped_median) if np.isnan(x['Age']) else x['Age'], axis=1)
它不會工作。這會給我這個警告,但我認爲這只是一個警告,並不意味着它沒有做任何事情! 「一個值試圖在DataFrame的一個片段的副本上設置,嘗試使用.loc [row_indexer,col_indexer] = value請參閱文檔中的注意事項:pandas.pydata.org/pandas-docs/stable/...
所有我需要做的是去除[DF [「標誌」] ==「火車」]部分從左側。
我仍然不知道爲什麼這種方法是行不通的。謝謝
查看關於使用'fillna()'進行插補的一篇文章(即用中位數填充缺失的數據):https://stackoverflow.com/questions/32617811/imputation-of-missing-values-for-categories-in -ndndas – NickBraunagel
謝謝!但這對我不起作用。我想使用特定組的中位數。我製作了我的桌子,並使用了apply函數。中位數實際上不是我的問題。我的問題是爲什麼數據不會在數據框中被替換。 – user3709260