Как обновить 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
→ Ссылка