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

时间:2016-01-13 13:01:22

标签: python csv pandas merge

我正在尝试将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#列,但是将Image Names保留为每行的标题。然后从以下csv文件中我保留PID和Mem Usage列,并尝试将之前一直在增长的csv文件与即将发布的文件中的数据合并。

这里的问题是,当循环进入第5次迭代时,它不能再合并文件,因为我得到“仅使用唯一值索引对象重新编制索引”错误。

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

有任何建议如何在不创建x额外循环的情况下执行此类链式合并?此时我正在试验40个文件并且实际上可以通过暴力循环来完成整个过程,但这不是首先合并的有效方式而且不可接受,如果我需要将其缩放为合并更多文件。

1 个答案:

答案 0 :(得分:1)

重复的列名称将导致此错误。

因此,您可以在函数merge中添加参数suffixes

  

后缀:2长度序列(元组,列表,...)

     

分别在左侧和右侧应用重叠列名称的后缀

Overlapping value columns