[英]Clean dict column in pandas dataframe
I have a DataFrame like the below
A B
1 {1:3,2:0,3:5}
2 {3:2}
3 {1:2,2:3,3:9}
我希望 B 列在幾行中缺少鍵,例如第二行只有鍵 3,但鍵 1 和鍵 2 丟失。 對於鍵 1,我想將值設置為 1,對於鍵 2,我想將值設置為 2,我想要的最終 dataframe 是`
A B
1 {1:3,2:0,3:5}
2 {1:1,2:1,3:2}
3 {1:2,2:3,3:9}
一個想法是使用 dicts 的merge
,但是為了避免覆蓋現有的鍵,必須missing
第一遍:
missing = {1:1, 2:2}
df['B'] = df['B'].apply(lambda x: {**missing, **x})
print (df)
A B
0 1 {1: 3, 2: 0, 3: 5}
1 2 {1: 1, 2: 2, 3: 2}
2 3 {1: 2, 2: 3, 3: 9}
如果變更單值被覆蓋:
df['B1'] = df['B'].apply(lambda x: {**x, **missing})
print (df)
A B B1
0 1 {1: 3, 2: 0, 3: 5} {1: 1, 2: 2, 3: 5}
1 2 {1: 1, 2: 2, 3: 2} {1: 1, 2: 2, 3: 2}
2 3 {1: 2, 2: 3, 3: 9} {1: 1, 2: 2, 3: 9}
如果想要更動態的解決方案並將所有錯誤鍵添加到相同的值,例如1
:
missing = dict.fromkeys(set().union(*df['B'].tolist()), 1)
df['B'] = df['B'].apply(lambda x: {**missing, **x})
print (df)
A B
0 1 {1: 3, 2: 0, 3: 5}
1 2 {1: 1, 2: 1, 3: 2}
2 3 {1: 2, 2: 3, 3: 9}
編輯:
對於通過方式替換值:
print (df)
A B
0 1 {1:3,2:5}
1 2 {3:2}
2 3 {1:2,2:3,3:9}
df['B'] = df['B'].apply(lambda x: {**dict.fromkeys([1,2,3], np.mean(list(x.values()))), **x})
print (df)
A B
0 1 {1: 3, 2: 5, 3: 4.0}
1 2 {1: 2.0, 2: 2.0, 3: 2}
2 3 {1: 2, 2: 3, 3: 9}
假設您的 dataframe 的名稱是 df:
df['B'][1][1] = 1
df['B'][1][2] = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.