我正在尝试将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文件中,我只是删除了会话名称和会话#列,但是将图像名称保留为每行的标题。然后,从下面的csv文件中,我只保留PID和Mem使用列,并尝试将以前一直在增长的csv文件与即将到来的文件中的数据合并。
这里的问题是,当循环到第5次迭代时,它不能再合并这些文件了,因为我得到了“只有唯一值的Index对象才有效的”错误。
所以我可以在第一个循环中合并第一个文件和第二个到第四个文件。如果然后创建第二个循环,将第5个文件合并到第6个至第8个文件,然后将这两个合并文件合并在一起,那么文件1到8中的所有数据都将完全合并。
对于如何在不创建x个额外循环的情况下执行这种链式合并有任何建议吗?此时,我正在试验40个文件,实际上可以用嵌套循环强行执行整个过程,但这并不是一种有效的合并方式,而且是不可接受的,如果我需要缩放这个来合并更多的文件的话。
发布于 2016-01-13 13:45:12
重复的列名将导致此错误。
所以您可以在函数suffixes中添加参数merge。
后缀:2长序列(元组,列表,.) 后缀分别适用于左侧和右侧重叠的列名。
重叠值列。
https://stackoverflow.com/questions/34767459
复制相似问题