我试图从40个几乎相似的csv文件与熊猫合并一个数据列。这些文件包含来自Windows'Tasklist'命令生成的csv表单中窗口进程的信息。如何将多个csv文件中的单个数据列合并到Pandas中?
我想要做的是,通过使用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 Usage列,并尝试将之前一直增长的csv文件与即将到来的文件中的数据合并。
这里的问题是,当循环进入第5次迭代时,它不能再合并文件,因为我得到“Reindexing只对有唯一值的索引对象有效”错误。
所以我可以合并第一个循环内的第一个文件与第二到第四。如果我然后创建第二个循环,我将第五个文件合并到第6到第8个文件,然后将这两个合并文件合并到一起,文件1到8中的所有数据将合并得非常好。
任何建议如何执行这种链式合并而不创建x额外的循环?在这一点上,我正在试验40个文件,实际上可以通过强制使用嵌套循环来完成整个过程,但这不是首先合并的有效方式,而且如果我需要缩放以合并甚至更多的文件。
重复列名称将导致此错误,请尝试消除重复的列名称。 – jezrael
谢谢!添加后缀=('_ x'+ str(i),'_y'+ str(i))似乎可以避免重复列名。从来没有想过类似的列名可能会引发这个唯一的id值错误。 – zaplec
我可以根据评论创建答案吗?你接受它吗? – jezrael