Проблема, возникающая при преобразовании фрейма данных в диктовку - PullRequest
1 голос
/ 25 марта 2019

У меня есть 2 столбца (имена столбцов Orig_Nm и Mapping), фрейм данных:

Отображение имени Orig

Имя FinalName

Идентификатор идентификатора

Групповая зона

Теперь я хочу преобразовать его в словарь, поэтому я использую

name_dict = df.set_index('Orig_Nm').to_dict()
print (name_dict)

Вывод, который я получаю:

{'Mapping': {'Group': 'Zone', 'ID_No': 'Identification', 'Name': 'Final_Name'}}

Так что это словарь в словаре {{}}. Что я делаю не так, что я не получаю ни одного словаря, т.е. {}

1 Ответ

1 голос
/ 25 марта 2019

Вам нужно Series.to_dict вместо DataFrame.to_dict путем выбора столбца Mapping для Series:

name_dict = df.set_index('Orig_Nm')['Mapping'].to_dict() 

Также работает выбор с помощью клавиши:

name_dict = df.set_index('Orig_Nm').to_dict()['Mapping']

РЕДАКТИРОВАНИЕ:

В вашем решении после set_index создан один столбец DataFrame, поэтому функция to_dict создает вложенный словарь - первым ключом является имя столбца:

d = {'Orig_Nm': ['Group', 'ID_No', 'Name'], 
     'Mapping': ['Zone', 'Identification', 'Final_Name']}
df = pd.DataFrame(d)
print (df)
  Orig_Nm         Mapping
0   Group            Zone
1   ID_No  Identification
2    Name      Final_Name

print (df.set_index('Orig_Nm'))
                Mapping
Orig_Nm                
Group              Zone
ID_No    Identification
Name         Final_Name

print (type(df.set_index('Orig_Nm')))
<class 'pandas.core.frame.DataFrame'>

Поэтому во избежание этого необходимо выбрать этот столбец в Series:

print (df.set_index('Orig_Nm')['Mapping'])
Orig_Nm
Group              Zone
ID_No    Identification
Name         Final_Name
Name: Mapping, dtype: object

print (type(df.set_index('Orig_Nm')['Mapping']))
<class 'pandas.core.series.Series'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...