2013-12-10 47 views
0

我對python非常陌生,而且我完全卡住了!我有兩個csv文件,我試圖將它們合併爲一個csv文件。下面是每個文件的前幾行,包括我想要獲取的實際輸出文件和輸出文件。 注意:我意識到文件不完全匹配(即CO_Num不一樣),但我只是抓住每個文件的前幾行,它們不是按順序排列的。如何使用不同的csv文件覆蓋csv文件中的列

plat1.csv: 
District,Complex_ID,Structure_Num,Area,Block,Name,Long,Latitude,Operator,Status,Comments,CO_Num 
4,90100,1,AC, 24, SSMANIFO, -94.76940277, 26.95505833,,,,  ,  
4,183,1,AC, 25, A-Hoover Spar, -94.68872137, 26.93905139,,,,00276, 4825 
4,2008,1,AC, 857, A(Perdido), -94.89791489, 26.12890071,,,,00689, 7835 


COMPAC.csv: 
CO_Num,Operator 
03249, LOUISIANA LAND AND EXPLORATION COMPANY LLC  
03267,145 OG HOLDINGS LLC        
03271,157 OG HOLDINGS LLC    

plat2.csv 
,90222,1,WR, 469, SS Manifold, -90.53058044, 26.51964805,,,,  ,  
4,183,1,AC, 25, A-Hoover Spar, -94.68872137, 26.93905139,,,,00276, 4825 
4,10500,1,GA, 209, A, -94.545972, 29.130363,,,,00276, 58 

desired plat2.csv 
District,Complex_ID,Structure_Num,Area,Block,Name,Long,Latitude,Operator,Status,Comments,CO_Num 
4, 90100,1,AC,24, SSMANIFO,-94.76940277,26.95505833,,,,                 
4, 183,1,AC,25,A-Hoover Spar,-94.68872137,26.93905139,EXXON MOBIL CORPORATION,,,00276      
4,2008,1,AC, 857, A(Perdido),-94.89791489,26.12890071,SHELL OFFSHORE INC.,,,00689 

我需要根據CO_Num列加入文件。我遇到的問題是操作員欄。在plat1.csv中該列爲空,我需要使用COMPAC.csv文件來填充它。我嘗試使用下面的代碼,但它不起作用。運算符字段在plat2.csv中仍爲空。

import pandas as pd 

c=pd.read_csv("c:/platform/plat1.csv") 

d=pd.read_csv("c:/platform/COMPAC.csv") 

merged=c.merge(d, how='left') 

merged.to_csv("c:/platform/plat2.csv", index=False) 

我還應該提到,並非Plat1.csv中的每一行都有一個CO_Num。我認爲這可能是問題的一部分,但是當我將plat1.csv和COMPAC.csv剪切到每一行(顯然與CO_Numb相匹配)後重新運行時,它仍然無法工作。

之後,我試圖再次使用剪輯文件重新運行它,但我從plat1.csv中刪除了操作員列。這是成功的,但我需要操作員列處於plat1.csv中的位置,而不是末尾。

基本上,我需要一種方法來加入/合併這兩個csv文件,其中plat1.csv中的操作符列被COMPAC.csv文件中的內容覆蓋,並且如果沒有CO_Num,則該行只是空的在操作員列中(所有其他列保持不變)。

我再次對此非常陌生,或者如果某件事情沒有意義,或者如果您有任何問題,請告訴我!

+0

你需要使用Python? – Alan

+0

是的,老闆說它必須是蟒蛇。不知道爲什麼,但我只是按照訂單 – Abby

回答

0

你不應該包括在合併C的空操作符列(包括它意味着雙方CO_Num和運營商合併,這意味着沒有共享密鑰):

merged = c[col for col in c.columns if col != 'Operator'].merge(d, how='left') 
+0

感謝您的答覆!我嘗試了你的建議,但似乎沒有奏效。操作員列仍爲空,列的順序現在不同。我需要命令保持它在plat1.csv中的方式,但是我得到了:區域,區塊,CO_Num,評論,Complex_ID,區域,緯度,長度,名稱,狀態,Structure_Num,深度,運算符 – Abby

+0

@Abby操作符列仍然是空的?這很混亂。你可以在你的問題中追加csvs的頭部(或者顯示這個的一些示例框架)...我不認爲它應該是空的,除非沒有CO_Num匹配。 –

+0

我回去了,並從每個文件中添加了幾行到我的問題。當我試圖從上面運行編輯後的代碼時,它告訴我「未能運行腳本語法錯誤 - 無效語法」 – Abby