将数据框转换为字典时面临的问题

时间:2019-03-25 07:42:19

标签: python-3.x pandas dataframe dictionary

我有2列(列名Orig_Nm和Mapping)数据帧:

原始名称映射

名称FinalName

Id_No身份标识

组区域

现在我希望将其转换为字典,所以我使用

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

我得到的输出是:

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

因此它是字典{{}}中的字典。 我做错了什么,我没有一本字典,即{}

1 个答案:

答案 0 :(得分:1)

通过为Mapping选择Series列,您需要Series.to_dict而不是DataFrame.to_dict

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'>