繁体   English   中英

如何从字典列表创建数据框?

[英]How to create a Dataframe from a list of dictionary?

我有这样的字典列表:

collection = [{'item': ['Policy Master 1-2022-2023-P0003 - 5 Days - Plan 3', 'Policy Master 2-2022-2023-P0009 - 5 Days - Plan 3', 'Policy Master 3-2022-2023-P0012 - 5 Days - Plan 3', 'Policy Master 1-2022-2023-P0003 - 5 Days - Plan 2', 'Policy Master 2-2022-2023-P0009 - 5 Days - Plan 2'], 'Mar': [2800.0, 600.0, 600.0, 1000.0, 200.0]}, {'item': ['Policy Master 1-2022-2023-P0003 - 5 Days - Plan 3', 'Policy Master 2-2022-2023-P0009 - 5 Days - Plan 3', 'Policy Master 3-2022-2023-P0012 - 5 Days - Plan 3', 'Policy Master 1-2022-2023-P0003 - 5 Days - Plan 2'], 'Jun': [2800.0, 600.0, 600.0, 1000.0]}]

我想从显示与之对应的每月数据中提取项目。 如果项目在上个月不存在,则应在上个月显示 NaN。 如何在熊猫中做到这一点? 未来还可以添加更多月份。 所以它应该动态地考虑所有月份。

看来您有一个可以合并在一起的可能数据框列表:

for i, x in enumerate(collection):
    if not i:
        df = pd.DataFrame(x)
    else:
        df = df.merge(pd.DataFrame(x), 'outer')

print(df)

输出:

                                                item     Mar     Jun
0  Policy Master 1-2022-2023-P0003 - 5 Days - Plan 3  2800.0  2800.0
1  Policy Master 2-2022-2023-P0009 - 5 Days - Plan 3   600.0   600.0
2  Policy Master 3-2022-2023-P0012 - 5 Days - Plan 3   600.0   600.0
3  Policy Master 1-2022-2023-P0003 - 5 Days - Plan 2  1000.0  1000.0
4  Policy Master 2-2022-2023-P0009 - 5 Days - Plan 2   200.0     NaN

或者:

from functools import reduce

reduce(lambda x, y: pd.merge(pd.DataFrame(x), pd.DataFrame(y), 'outer'), collection)

继续完成前面的代码:

for i, x in enumerate(collection):
    if not i:
        df = pd.DataFrame(x)
    else:
        df = df.merge(pd.DataFrame(x), 'outer')
df_1 = df['item'].str.split("-", expand=True)
df = df.join(df_1)
df.drop(['item'], axis=1, inplace=True)

输入:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM