2017-08-31 23 views
0

我有一個從電子商店數據庫導出的4個csv文件,我需要按列合併它們,我可能會獨自完成這些操作。但問題是相匹配的右列合併csv列,同時檢查第一列的ID

第一個文件:

"ep_ID","ep_titleCS","ep_titlePL"..... 

"601","Kancelářská židle šedá",NULL..... 

... 

第二個文件:

"pe_photoID","pe_productID","pe_sort" 

"459","603","1" 


... 

第三檔:

"epc_productID","epc_categoryID","epc_root" 

"2155","72","1" 


... 

第四檔:

"ph_ID","ph_titleCS"... 

"379","5391132275.jpg" 

...

我需要所以用相同的「EP#ID」行「epc_productID」合併在一起的行和列具有相同的「ph_ID」匹配「 pe_photoID」了。我真的不知道從哪裏開始,希望我寫的理解

更新: 我使用:

files = ['produkty.csv', 'prirazenifotek.csv', 'pprirazenikategorii.csv', 'adresyfotek.csv'] 
dfs = [] 

for f in files: 
    df = pd.read_csv(f,low_memory=False) 
    dfs.append(df) 

first_and_third =pd.merge(dfs[0],dfs[1],left_on = "ep_ID",right_on="pe_photoID") 

first_and_third.to_csv('new_filepath.csv', index=False) 

好此代碼的工作,但它以另一種方式比我更需要兩件事:

  1. 當在文件中的一個與ID的行= 1爲例,並在接下來的文件中的兩個有5行與BID = 1,則它產生5行詮釋最終文件我想在第二個文件中有一行將具有來自bID = 1的每行的多個值。可能嗎?

  2. 而且它似乎是刪除一些行...不知道,直到我擺脫了「重複」的...

+0

使用其他軟件包或類似的東西時可以這樣做嗎? – Jakub

回答

0

您可以使用pandasmerge方法到CSV的融合在一起。在你的問題中,你只提供第一和第三個文件以及第二和第四個文件之間的密鑰。不知道你是否想要一個巨大的桌子,把它們放在一起 - 如果是這樣,你需要找到另一箇中間密鑰,也許你還沒有列出(?)。

import pandas as pd 

files = ['path_to_first_file.csv', 'second_file.csv', 'third_file.csv', 'fourth_file.csv'] 
dfs = [] 

for f in files: 
    df = pd.read_csv(f) 
    dfs.append(df) 

first_and_third = dfs[0].merge(dfs[2], left_on='ep_ID', right_on='epc_productID', how='left') 
second_and_fourth = dfs[1].merge(dfs[3], left_on='pe_photoID', right_on='ph_ID', how='left') 

如果你想保存數據框回落到一個文件,你可以這樣做:

first_and_third.to_csv('new_filepath.csv', index=False) 

index=False假設你有沒有索引的數據幀,而且不希望數據框的行號將被包含在最終的csv中。

+0

謝謝,似乎不錯,但我越來越怪異的錯誤: DF = pd.read_csv(文件[F]) 類型錯誤:列表索引必須是整數或片,而不是str的 – Jakub

+0

@Jakub歉意 - 錯字。用'pd.read_csv(f)'替換'pd.read_csv(files [f])'' –

+0

現在好了我得到了:ValueError:len(left_on)必須等於索引中「right」的級數 應該使用合併而不是?現在試着去做 – Jakub

相關問題