在数据框单元格中修改字典

时间:2018-09-19 12:18:57

标签: python python-2.7 pandas dictionary dataframe

我有一个熊猫数据框。在每个单元格中都有一个字典:

id | A                | B              | ...
1  | {"a": 1, "b":1}  |{"d": 1, "e":1} | ...
2  | {"a": 2, "b":3}  |{"d": 5, "e":6} | ...
...
10  | {"a": 1, "b":1}  |{"d": 1, "e":3} | ...

我想更新一个单元格(例如1,A):

df.loc[1,"A"].update({"c":2})

此过程将更新具有相同dict的每个单个单元格,因此在这种情况下(将更改1,A和10,A):

id | A                       
1  | {"a": 1, "b":1, "c":2}  
2  | {"a": 2, "b":3}         
...
10  | {"a": 1, "b":1, "c":2}  

如何强制python仅更新 1,A?

这是我创建数据框的方式:

df = pd.read_csv( file_path, sep='\t', names=['id', 'A'], compression='gzip', converters={1:ast.literal_eval})

1 个答案:

答案 0 :(得分:0)

正如注释中所指出的,[1, "A"][10, "A"]中的两个字典是相同的,因此您不能不更新另一个而更新一个。

虽然我不明白为什么会这样,但是在每个单元格中深度复制字典可以解决问题:

import copy
df = df.applymap(lambda d: copy.deepcopy(d))