我有一个熊猫数据框。在每个单元格中都有一个字典:
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})
答案 0 :(得分:0)
正如注释中所指出的,[1, "A"]
和[10, "A"]
中的两个字典是相同的,因此您不能不更新另一个而更新一个。
虽然我不明白为什么会这样,但是在每个单元格中深度复制字典可以解决问题:
import copy
df = df.applymap(lambda d: copy.deepcopy(d))