Изменить dict в ячейке данных - PullRequest
       4

Изменить dict в ячейке данных

0 голосов
/ 19 сентября 2018

У меня есть фрейм данных панд.В каждой ячейке есть слово:

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})

Эта процедура обновляет каждую ячейку, которая имеетТо же самое, поэтому в этом случае будет (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 обновить only 1, A?

Вот как я создаю фрейм данных:

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

1 Ответ

0 голосов
/ 20 сентября 2018

Как указано в комментариях, оба словаря в [1, "A"] и [10, "A"] одинаковы, поэтому вы не можете обновить один без обновления другого.

Хотя я не понимаю, почему это происходит, глубокоКопирование словаря в каждой ячейке решает проблему:

import copy
df = df.applymap(lambda d: copy.deepcopy(d))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...