如何更新pandas数据框中的字典值

xlpyo6sf  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(150)
dic = {'key1': ['value 1','value2'],'key2':[[{'a':'123','b':[]}],[{'a':'231','b':['123','56']}]]}
df = pd.DataFrame(dic)

如果key2值'b'==[],则期望修改 Dataframe 输出,然后替换为Null值
期望输出

key1           key2 
value1         [{'a':'123', 'b':**Null**}]   
value2         [{'a':'231', 'b':['123','56']}]
twh00eeo

twh00eeo1#

另一个解决方案:

df['key2'] = df['key2'].apply(lambda x: [{k: v or np.nan for k, v in d.items()} for d in x])
print(df)

图纸:

key1                                key2
0  value 1            [{'a': '123', 'b': nan}]
1   value2  [{'a': '231', 'b': ['123', '56']}]
  • 注意:* 您可以将np.nan替换为None

编辑:
要限制仅替换密钥b,请执行以下操作:

df['key2'] = df['key2'].apply(lambda x: [{k: v or np.nan if k == 'b' else v for k, v in d.items()} for d in x])
gopyfrb3

gopyfrb32#

你需要使用循环:

for l in dic['key2']:  # or for l in df['key2']:
    for d in l:
        if 'b' in d and d['b'] == []:
            d['b'] = None

print(df)
  • 注意,使用df = pd.DataFrame(dic)会使df['key2]dic['key2']指向相同的对象。因此,修改其中一个也会更改另一个。*

输出:

key1                                key2
0  value 1           [{'a': '123', 'b': None}]
1   value2  [{'a': '231', 'b': ['123', '56']}]

相关问题