2016-01-13 113 views
1

我試圖從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個文件,實際上可以通過強制使用嵌套循環來完成整個過程,但這不是首先合併的有效方式,而且如果我需要縮放以合併甚至更多的文件。

+0

重複列名稱將導致此錯誤,請嘗試消除重複的列名稱。 – jezrael

+0

謝謝!添加後綴=('_ x'+ str(i),'_y'+ str(i))似乎可以避免重複列名。從來沒有想過類似的列名可能會引發這個唯一的id值錯誤。 – zaplec

+0

我可以根據評論創建答案嗎?你接受它嗎? – jezrael

回答

1

重複的列名稱將導致此錯誤。

所以,你可以在功能merge添加參數suffixes

後綴:2長度序列(元組,列表,...)

後綴適用於在重疊的列名左側和右側,分別爲

Overlapping value columns

相關問題