[英]Fill NaNs in pandas columns using dictionary
有沒有辦法使用不包含所有列的字典映射列值。 例如:
假設我的數據框是:
A B C D E F
nan nan nan nan nan nan
我有一本字典,我想用作映射器:
d = {'A': 1, 'B': 1, 'E': 1}
所以輸出應該用0替換那些不在字典中的值
A B C D E F
1 1 0 0 1 0
最慣用的選擇是兩個fillna
調用,
df.fillna(d).fillna(0, downcast='infer')
df
A B C D E F
0 1 1 0 0 1 0
piRSquared建議assign
作為第一個fillna
調用的替代方案,
df.assign(**d).fillna(0, downcast='infer')
df
A B C D E F
0 1 1 0 0 1 0
另一種選擇是在列上使用Index.isin
。 這是單行形式:
df[:] = [df.columns.isin(d.keys()).astype(int)]
要概括為N行,我們使用repeat
:
df[:] = df.columns.isin(d.keys()).astype(int)[None,:].repeat(len(df), axis=0)
df
A B C D E F
0 1 1 0 0 1 0
為了好玩,您還可以使用reindex
:
pd.DataFrame(d, index=df.index).reindex(df.columns, axis=1, fill_value=0)
A B C D E F
0 1 1 0 0 1 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.