簡體   English   中英

清理 pandas dataframe 中的 dict 列

[英]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.

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