首页 > 解决方案 > 从字典中提取数据框

问题描述

我正在开发一个项目,该项目使用 python 脚本读取多个 .xls 文件,目标是让一个数据帧包含所有文件中的所有数据点。听起来很简单。

由于标题名称和标题的位置因文件而异(有些还有其他列),所以我的脚本将每个文件保存为字典中的数据框。这很好,因为它可以捕获每个文件中的所有数据点。可以使用 keys 函数调用每个数据帧。

我的项目将包含大约 1500 个要读入的 .xls 文件,但现在我只使用 5 个文件来使代码正常工作。

但是,问题是如何提取保存到字典中的每个数据帧并将其转换为单个视图。

前面提到的标头名称可能因字典中的每个数据帧而异,如下所示:

示例文件 1: Security Type | Primary Source | Secondary Source | Pricing Logic | Valuation Point

示例文件 2: Security Type | Primary Source | Secondary Source | Pricing Logic | Valuation Point

示例文件 3: Security Type | Secondary Source | Primary Source | Pricing Logic

我如何遍历此字典以生成单个视图/数据框,知道标题可能位于不同的位置,并且有些标题可能比其他标题名称更多,但所有标题都同等重要且不能省略。

标签: pythonpandasdataframedictionary

解决方案


试试下面的。下面你有两个 dummy dataframes,都包括列AB,以及第三个排他列(分别为Xand Y),列顺序不一致。

假设您想要在最终视图中的列在cols(A并且B在这种情况下) 中定义。

按照以下步骤 - 遍历字典并将结果保存在 final 中dff,使用pd.concat- 您可以实现您的要求。

dfs = {
    'df1': pd.DataFrame({'A': ['1A'], 'B': ['1B'], 'X': ['X']}),
    'df2': pd.DataFrame({'Y': ['Y'], 'A': ['2A'], 'B': ['2B']})    
}

cols = ['A', 'B']

dff = pd.DataFrame()
for k in dfs.keys():
    dff = pd.concat([dff, dfs[k][cols]]).reset_index(drop=True)
    
print(dff)
    A   B
0  1A  1B
1  2A  2B

推荐阅读