【发布时间】:2019-02-23 14:53:30
【问题描述】:
我有一个熊猫数据框。在每个单元格中都有一个字典:
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} | ...
我想更新一个单元格(e.i 1,A):
df.loc[1,"A"].update({"c":2})
此过程会更新具有相同字典的每个单元格,因此在这种情况下会出现(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,A 和 10,A 是否是同一个对象
-
要添加到@Yuca 的评论中,您应该将一列dicts 视为一列指向dicts 的指针(如果两行具有相同的指针值,您观察到的情况会发生)
-
有什么想法可以构造 df 来避免这个问题吗? @尤卡
-
老实说,我没有这方面的经验。你似乎有一个非常干净的结构,所以我的第一个猜测是检查
read_csv的参数是否有帮助 -
@IanS 老实说,对指针进行操作并不是我的本意。他们让自己变得自发......
标签: python python-2.7 pandas dictionary dataframe