我正在尝试将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个文件并且实际上可以通过暴力循环来完成整个过程,但这不是首先合并的有效方式而且不可接受,如果我需要将其缩放为合并更多文件。
答案 0 :(得分:1)