【问题标题】:list of nested dictionaries to pandas dataframe (type object 'DataFrame' has no attribute 'from_items')到熊猫数据框的嵌套字典列表(类型对象'DataFrame'没有属性'from_items')
【发布时间】:2021-06-03 15:36:02
【问题描述】:

我是python的初学者。我有一个嵌套字典。我试图从嵌套字典列表中获取 pandas 数据框。

Sample file of dict in pickle

名为user_dict 的嵌套字典如下:

[{'1000003': {'car': 0.0,    'car_passenger': 0.0,    'pt': 0.0,    'walk': 0.0,    'bike': 0.0}},  {'1000007': {'car': 0.0,    'car_passenger': 0.0,    'pt': 856.0786277323101,    'walk': 2546.869189662443,    'bike': 0.0}},  
{'1000008': {'car': 0.0,    'car_passenger': 34189.569164682835,    'pt': 0.0,    'walk': 0.0,    'bike': 0.0}},  
{'1000009': {'car': 0.0,    'car_passenger': 0.0,    'pt': 0.0,    'walk': 0.0,    'bike': 9847.472668350396}}]

我想得到这样的数据框:

Expected dataframe

我根据 Igor Raush 的回答 (Getting pandas dataframe from list of nested dictionaries) 使用了代码

from itertools import chain
pd.DataFrame.from_items(list(chain.from_iterable(d.iteritems() for d in user_dict))).T

但它对我不起作用,相反,它引发了这样的错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-21-8ea27c4b8e43> in <module>
----> 1 pd.DataFrame.from_items(list(chain.from_iterable(d.iteritems() for d in user_dict))).T

AttributeError: type object 'DataFrame' has no attribute 'from_items'

它适用于 classmethod pd.concat,但我有超过 200k 的观察结果,所以我正在寻找有效的解决方案。非常感谢任何解决方案。

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    这里有一个解决方案:

    dics = [{'1000003': {'car': 0.0,    'car_passenger': 0.0,    'pt': 0.0,    'walk': 0.0,    'bike': 0.0}},  {'1000007': {'car': 0.0,    'car_passenger': 0.0,    'pt': 856.0786277323101,    'walk': 2546.869189662443,    'bike': 0.0}},  
           {'1000008': {'car': 0.0,    'car_passenger': 34189.569164682835,    'pt': 0.0,    'walk': 0.0,    'bike': 0.0}},  
           {'1000009': {'car': 0.0,    'car_passenger': 0.0,    'pt': 0.0,    'walk': 0.0,    'bike': 9847.472668350396}}]
    
    df = pd.DataFrame(columns = ['car','car_passenger','pt','walk','bike' ])
    index_list = []
    for dic in dics: 
        key = list(dic.keys())[0]
        index_list.append(key)
        df = df.append(dic[key], ignore_index=True)
    df.index = index_list
    df
    
    #Output: 
    
            car     car_passenger   pt          walk        bike
    1000003 0.0     0.000000        0.000000    0.00000     0.000000
    1000007 0.0     0.000000        856.078628  2546.86919  0.000000
    1000008 0.0     34189.569165    0.000000    0.00000     0.000000
    1000009 0.0     0.000000        0.000000    0.00000     9847.472668
    
    

    【讨论】:

    • 嗨,非常感谢。它完美地工作。假设我在字典Sample data 中添加了另一层嵌套。为了获得这样的数据框,我应该调整什么:expected dataframe。你能给我一些线索吗?
    • 对不起,样本数据有误,我会在这里上传新的correct sample data
    • 看不到您的数据。我认为唯一的区别是您需要排列 df 列 df = pd.DataFrame(columns = [ Actual Columns ]) 的列号,如果您觉得它有用,请接受答案。
    • 您好,谢谢。所以数据看起来像这样:dics = [{'1000003': {'dist': {'car': 0.0, 'car_p': 0.0, 'pt': 0.0, 'walk': 0.0, 'bike': 0.0}, 'attribute': {'student': 'yes'}}}, {'1000007': {'dist': {'car': 0.0, 'car_p': 0.0, 'pt': 856.0, 'walk': 2546.0, 'bike': 0.0}, 'attribute': {'student': 'no'}}}]。额外的嵌套分隔 dist 和属性。顺便谢谢你的回答
    • 希望对您有所帮助:index_list = [] df = pd.DataFrame(columns = ['car', 'car_p', 'pt', 'walk', 'bike', 'student']) for dic in dics: key = list(dic.keys())[0] index_list.append(key) df = df.append(dic[key]['dist'], ignore_index=True) df.index = index_list print(df)
    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2018-08-13
    • 2023-03-23
    • 2018-04-14
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多