Как обновить pandas dataframe данными из словаря?
Есть датафрейм:
test_dict = {
'A':1,
'B':2,
'C':3,
'D':None
}
test_dict_df = pd.DataFrame.from_dict(test_dict.items())
test_dict_df = test_dict_df.rename(columns={0:'name', 1:'value'})
Теперь в этом датафрейме хочу по словарю update_dict заменить значение столбца:
update_dict = {'D':33}
for i,x in update_dict.items():
test_dict_df[test_dict_df['name']==i]['value'] = x
Но он никак не обновляет таким циклом датафрейм (
хочу именно что-то вроде цикла, потому что в update_dict может быть несколько keys.
Может, через apply как-то можно?
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
t = test_dict_df["name"].map(update_dict).dropna()
test_dict_df.loc[t.index, "value"] = t
результат:
In [276]: test_dict_df
Out[276]:
name value
0 A 1.0
1 B 2.0
2 C 3.0
3 D 33.0
PS метод Series.map() заменит все значения ключей на соответствующие им значения, поэтому цикл здесь не нужен.
Автор решения: SergFSM
→ Ссылка
Поскольку ваш датафрэйм создается из словаря, а у словаря ключи уникальны, то можно использовать ключи как индекс. Тогда обновлять датафрэйм по словарю можно так:
test_dict = {
'A':1,
'B':2,
'C':3,
'D':None
}
td = pd.DataFrame(test_dict.items(), columns=['name','value']).set_index('name')
update_dict = {'D':33,'A':44}
td.loc[update_dict,'value'] = pd.Series(update_dict)
результат:
value
name
A 44
B 2
C 3
D 33