将Pandas数据框转换为字典会使用空格重命名列标题

时间:2019-01-29 03:22:56

标签: python pandas dictionary dataframe

我注意到,使用to_dict()方法转换Pandas数据帧会导致包含空格的列名称在结果字典键中被重命名。首先,请让我明确说明,我了解在数据框列名称中故意包含空格通常是一种不好的做法。我的用例涉及通过其dash-table属性更新data,该属性根据在静态HTML布局中指定的预定义列名填充数据表(由于动态更新列标题,因此无需它们的顺序不依赖于任何回调)。采取以下示例数据框:

import pandas as pd

df = pd.DataFrame({'Distance (ft)': [1, 2, 3, 4, 5],
    'City': ['Seattle','Portland','Spokane','Everett','Tacoma'],
    'Temp (F)': [10, 20, 30, 40, 50]})

收益:

   Distance (ft)      City  Temp (F)
0              1   Seattle        10
1              2  Portland        20
2              3   Spokane        30
3              4   Everett        40
4              5    Tacoma        50

当我尝试使用df.to_dict()的默认值orient='dict'转换此数据帧时,我返回期望的值:

{'Distance (ft)': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'City': {0: 'Seattle', 1: 'Portland', 2: 'Spokane', 3: 'Everett', 4: 'Tacoma'}, 'Temp (F)': {0: 10, 1: 20, 2: 30, 3: 40, 4: 50}}

但是,对orient使用替代参数,例如:

df.to_dict('records')
df.to_dict('rows')

两次返回:

[{'_0': 1, 'City': 'Seattle', '_2': 10}, {'_0': 2, 'City': 'Portland', '_2': 20}, {'_0': 3, 'City': 'Spokane', '_2': 30}, {'_0': 4, 'City': 'Everett', '_2': 40}, {'_0': 5, 'City': 'Tacoma', '_2': 50}]

是否可以返回以下内容而不必在所需的列名和输出字典键之间执行中间映射?

[{'Distance (ft)': 1, 'City': 'Seattle', 'Temp (F)': 10}, {'Distance (ft)': 2, 'City': 'Portland', 'Temp (F)': 20}, {'Distance (ft)': 3, 'City': 'Spokane', 'Temp (F)': 30}, {'Distance (ft)': 4, 'City': 'Everett', 'Temp (F)': 40}, {'Distance (ft)': 5, 'City': 'Tacoma', 'Temp (F)': 50}]

1 个答案:

答案 0 :(得分:3)

可以做到

[y.iloc[0,:].to_dict() for x , y in df.groupby(level=0)]
[{'City': 'Seattle', 'Distance (ft)': 1, 'Temp (F)': 10}, {'City': 'Portland', 'Distance (ft)': 2, 'Temp (F)': 20}, {'City': 'Spokane', 'Distance (ft)': 3, 'Temp (F)': 30}, {'City': 'Everett', 'Distance (ft)': 4, 'Temp (F)': 40}, {'City': 'Tacoma', 'Distance (ft)': 5, 'Temp (F)': 50}]