pandas 从字典列表中获取 Dataframe

pqwbnv8z  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(130)
import pandas as pd

list_sample = [{'name': 'A', 'fame': 0, 'data': {'date':['2021-01-01', '2021-02-01', '2021-03-01'], 
                        'credit_score':[800, 890, 895],
                        'spend':[1500, 25000, 2400], 
                        'average_spend':5000}},
               {'name': 'B', 'fame': 1, 'data': {'date':['2022-01-01', '2022-02-01', '2022-03-01'],
                                   'credit_score':[2800, 390, 8900],
                                   'spend':[15000, 5000, 400], 
                                   'average_spend':3000}}]

df = pd.DataFrame()
for row in list_sample:
    name = row['name']
    fame = row['fame']
    data = row['data']
    df_temp = pd.DataFrame(data)
    df_temp['name'] = name
    df_temp['fame'] = fame
    df = pd.concat([df, df_temp])

上面是我如何得到我的 Dataframe 。上面是一个虚拟的例子,但是,上面的问题是当列表的大小和每个数据数组中的条目数增长。上面花了很多时间。可能是concat的问题或其他东西,有没有更好的方法来做我正在做的上面(更好的运行时间!)

yzuktlbb

yzuktlbb1#

一种方法是将list_sample字典中的嵌套数据字典扁平化,可以使用json_normalize来实现。

import pandas as pd
from pandas.io.json import json_normalize

df = pd.DataFrame(list_sample)
df = pd.concat([df.drop(['data'], axis=1), json_normalize(df['data'])], axis=1)
5uzkadbs

5uzkadbs2#

看起来你并不关心数据列的标准化,如果是这样的话,你可以只做df = pd.DataFrame(list_sample)来达到同样的结果,我认为你只需要做你正在做的迭代类型,如果你想标准化数据。

ltqd579y

ltqd579y3#

组合list_sample中的所有指令以适合 Dataframe 结构,并立即将它们 * concat *:

df = pd.concat([pd.DataFrame(d['data'] | {'name': d['name'], 'fame': d['fame']}) 
                for d in list_sample])

print(df)
date  credit_score  spend  average_spend name  fame
0  2021-01-01           800   1500           5000    A     0
1  2021-02-01           890  25000           5000    A     0
2  2021-03-01           895   2400           5000    A     0
0  2022-01-01          2800  15000           3000    B     1
1  2022-02-01           390   5000           3000    B     1
2  2022-03-01          8900    400           3000    B     1

相关问题