首页 > 解决方案 > 如何附加多个 CSV 文件并创建 MultiIndex 数据框

问题描述

我在一个文件夹中有多个 csv 文件。目标是将 csv 文件附加到单个 pd 帧中。

问题是我们如何使用 pandas 连接文件夹中的所有文件,但同时使用 keys 参数将特定键与切碎的 DataFrame 的每个片段相关联keys

这意味着我们现在可以按键选择每个块:

例如,给定一个文件夹中的两个 csv 文件,每个 csv 有 3 列(A、B、C)和两行。

CSV 文件:Book1

A0 B0 C0

A1 B1 C1

CSV 文件:Book2

A2 B2 C2

A3 B3 C3

预期的帧如图所示。

在此处输入图像描述

请注意左侧列中的索引 Book1 和 Book2。此名称来自上述 csv 文件。

到目前为止,我有以下代码

# match the pattern ‘csv’ in the folder
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

但是在下面的代码行下我需要更改以实现上述目标?

combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])

添加此密钥的原因是为了方便将来访问。这通常可以从

.loc['Book1']

标签: pythonpandasappend

解决方案


您可以使用方法为每个数据框添加一个额外的列assign;这可以在它们被读取之后和连接之前完成

combined_csv = pd.concat([pd.read_csv(f).assign(name=f) for f in all_filenames ])

这将添加name所有值等于 file name 的列f

当所有数据集连接时,您可以设置MultiIndex

combined_csv.reset_index(drop=True, inplace=True)

combined_csv.set_index([combined_csv.name, combined_csv.index], inplace=True)

推荐阅读