如何使用 Pandas 将多个 csv 文件中的单个数据列合并为一个?

Posted

技术标签:

【中文标题】如何使用 Pandas 将多个 csv 文件中的单个数据列合并为一个?【英文标题】:How to merge single data column from multiple csv files into one with Pandas? 【发布时间】:2016-04-18 11:20:49 【问题描述】:

我正在尝试将来自 40 个几乎相似的 csv 文件的单个数据列与 Pandas 合并。这些文件包含由 Windows 'Tasklist' 命令生成的 csv 格式的 Windows 进程信息。

我想要做的是,通过使用 PID 作为键,将这些文件中的内存信息合并到一个文件中。但是,有时会出现一些随机的无关紧要的过程,但会导致 csv 文件之间的不一致。这意味着在某些文件中可能有 65 行,在某些文件中可能有 75 行。然而,这些随机进程并不重要,它们的 PID 变化应该无关紧要,在合并文件时它们也应该被丢弃。

这是我第一次尝试这样做的方式:

# CSV files have following columns
# Image Name, PID, Session Name, Session #, Mem Usage

file1 = pd.read_csv("tasklist1.txt")
file1 = file1.drop(file1.columns[[2,3]], axis=1)    

for i in range(2,41):

    filename = "tasklist" + str(i) + ".txt"

    filei = pd.read_csv(filename)
    filei = filei.drop(filei.columns[[0,2,3]], axis=1)

    file1 = file1.merge(filei, on='PID')


file1.to_csv("Final.txt", index=False)

从第一个 csv 文件中,我只删除了 Session Name 和 Session # 列,但保留图像名称作为每一行的标题。然后从以下 csv 文件中,我只保留 PID 和 Mem Usage 列,并尝试将以前一直在增长的 csv 文件与即将到来的文件中的数据合并。

这里的问题是,当循环进行第 5 次迭代时,它无法再合并文件,因为我得到“重新索引仅对唯一值索引对象有效”错误。

所以我可以在第一个循环内将第一个文件与第二个文件合并到第四个文件。如果然后创建第二个循环,将第 5 个文件合并到第 6 个到第 8 个文件,然后将这两个合并的文件合并在一起,则文件 1 到 8 中的所有数据都将完美地合并。

任何建议如何在不创建 x 数量的额外循环的情况下执行这种链式合并?在这一点上,我正在试验 40 个文件,实际上可以通过使用嵌套循环的蛮力来完成整个过程,但这首先不是有效的合并方式,而且是不可接受的,如果我需要扩展它以合并更多文件。

【问题讨论】:

重复的列名会导致这个错误,尝试消除重复的列名。 谢谢!添加 suffixes=('_x'+str(i), '_y'+str(i)) 似乎可以解决问题并轻松消除重复的列名。从来没有想过类似的列名也会引发唯一的 id 值错误。 我可以从评论中创建答案吗?你接受吗? 【参考方案1】:

列名重复会导致此错误。

所以你可以在函数merge中添加参数suffixes

suffixes:2 长序列(元组、列表、...)

分别应用于左右重叠列名的后缀

Overlapping value columns.

【讨论】:

以上是关于如何使用 Pandas 将多个 csv 文件中的单个数据列合并为一个?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python Pandas 合并多个 CSV 文件

分块读取 Pandas 中的多个 CSV 文件

如何将多个 csv 文件连接到 pandas 数据框中,文件名作为行名?

Pandas:使用循环和分层索引将多个 csv 文件导入数据帧

将多个csv文件导入pandas并连接成一个DataFrame

将多个csv文件导入pandas并拼接成一个DataFrame