【问题标题】:Extracting Dataframes from a Dictionary从字典中提取数据框
【发布时间】:2021-10-14 00:35:51
【问题描述】:

我正在开发一个项目,该项目使用 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

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

【问题讨论】:

  • 所以总结一下脚本应该读取所​​有的 excel 文件,并将它们组合在一个 Dataframe 中,如果它们存在两次或更多,则匹配可能的标题?
  • pd.concat() 应该为您解决这个问题。查看提供的示例。只要列名相同,列的顺序无关紧要。

标签: python pandas dataframe dictionary


【解决方案1】:

试试下面的。下面有两个虚拟dataframes,都包含AB列,还有一个排他列(分别为XY),列顺序不一致。

假设您想要在最终视图中使用的列在cols 中定义(在本例中为AB)。

按照以下步骤 - 遍历字典并将结果保存在最终的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2020-05-23
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多