Замена вложенного словаря в пустой фрейм данных - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующее nested_dict:

{'view_0': {'spain': -1}, 'view_1': {'portugal': 0}, 'view_2': {'morocco': 1.0, 'france': -1.0}, 'view_3': {'germany': 0.5, 'italy': 0.5, 'uk': -0.5, 'ireland': -0.5}}

С другой стороны, у меня есть следующее empty_df, в котором в индексе появляются клавиши nested_dict.и в столбцах key, найденных в значениях каждого nested_dict.

            spain  portugal  morocco  france  germany  italy  uk   ireland
view_0          0    0         0        0       0       0      0      0             
view_1          0    0         0        0       0       0      0      0       
view_2          0    0         0        0       0       0      0      0       
view_3          0    0         0        0       0       0      0      0       

. Я хотел бы поместить values.values() из nested_dict в empty_df, чтобы получить следующий вывод:

            spain  portugal  morocco  france  germany  italy  uk   ireland
view_0         -1    0         0        0       0       0      0      0             
view_1          0    0         0        0       0       0      0      0       
view_2          0    0         1       -1       0       0      0      0       
view_3          0    0         0        0      0.5     0.5   -0.5   -0.5

И для этого я попытался

empty_df.replace(nested_dict)

Однако возвращает empty_dict, заполненный нулями, без подстановки значений.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Создайте фрейм данных из своего словаря и используйте pd.DataFrame.update:

df_data = pd.DataFrame.from_dict(d, orient='index')

df.update(df_data)

print(df)

        spain  portugal  morocco  france  germany  italy   uk  ireland
view_0   -1.0       0.0      0.0     0.0      0.0    0.0  0.0      0.0
view_1    0.0       0.0      0.0     0.0      0.0    0.0  0.0      0.0
view_2    0.0       0.0      1.0    -1.0      0.0    0.0  0.0      0.0
view_3    0.0       0.0      0.0     0.0      0.5    0.5 -0.5     -0.5
0 голосов
/ 23 октября 2018

Если возможно, используйте DataFrame.from_dict и заменяйте пустые значения на fillna:

df = pd.DataFrame.from_dict(d, orient='index').fillna(0)

Также возможно добавить reindex для тех же столбцов и имен индексов в том же порядке, как empty_df:

df = (pd.DataFrame.from_dict(d, orient='index')
                  .reindex(columns=empty_df.columns, index=df_empty.index)
                  .fillna(0))

print (df)
        spain  portugal  morocco  france  germany  italy   uk  ireland
view_0   -1.0       0.0      0.0     0.0      0.0    0.0  0.0      0.0
view_1    0.0       0.0      0.0     0.0      0.0    0.0  0.0      0.0
view_2    0.0       0.0      1.0    -1.0      0.0    0.0  0.0      0.0
view_3    0.0       0.0      0.0     0.0      0.5    0.5 -0.5     -0.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...