2017-06-27 59 views
1

我對Python很新穎,目前正致力於創建數據比較腳本。我有以下格式用於CSV文件比較的Python腳本

CSV1(源系統)

EMP_ID, EMP_NAME, EMP_LOCATION 
1,Sam J, Houston 
2,Man T, Houston 
3,Sub D, Chicago 
4,Saggie D, New York 

CSV2(遷移/目標)

EMP_ID, EMP_NAME, EMP_LOCATION 
1,Sam J, Houston£[email protected]£ 
2,Man T, Houston 
3,Sub D, Chicago 
4,Saggie D, New York^^^ 

兩個文件我想比較結果是這樣的此

EMP_ID_S, EMP_ID_T, EMP_ID_STATUS, EMP_NAME_S, EMP_NAME_T, EMP_NAME_STATUS, EMP_LOCATION_S, EMP_LOCATION_T, EMP_LOCATION_STATUS 

1,1,Matched,Sam J, Sam J, Matched, Houston, Houston£[email protected]£, Not Matched 
4,4,Matched,Saggie D, Saggie D, New York, New York^^^, Not Matched 

我已經找到文件比較腳本,但找不到這種類型的東西。

+3

你有什麼試過?閱讀關於python中的'csv'模塊。 – void

+1

向我們展示您到目前爲止所嘗試的內容,並請閱讀以下內容:[我如何提出一個好問題?](https://stackoverflow.com/help/how-to-ask) – Clonkex

回答

-1

它聽起來有點不可思議,但你可以用熊貓

df1 = pd.read_csv('../data/example1.csv') 
df2 = pd.read_csv('../data/example2.csv') 

再加入對ID列2個不同的數據幀。然後,您可以創建新列爲EMP_LOCATION_S與

df1["EMP_LOCATION_S"] = df1["EMP_NAME_S"] == df2["EMP_NAME_T"] 
0

這裏我提供了完整的解決方案,我將解釋這些概念。

import pandas as pd 


index_list = ['EMP_ID_S', 'EMP_ID_T', 'EMP_ID_STATUS', 
       'EMP_NAME_S', 'EMP_NAME_T', 'EMP_NAME_STATUS', 
       'EMP_LOCATION_S', 'EMP_LOCATION_T', 
       'EMP_LOCATION_STATUS'] 

common_list = ['EMP_ID','EMP_NAME','EMP_LOCATION'] 
update1_list = list(zip(['EMP_ID_S','EMP_NAME_S','EMP_LOCATION_S'],common_list)) 

update2_list = list(zip(['EMP_ID_T','EMP_NAME_T','EMP_LOCATION_T'],common_list)) 




df1 = pd.read_csv("file1.csv") 
df2 = pd.read_csv("file2.csv") 
df3 = pd.DataFrame(list(range(4)),columns=['EMP_ID']) 
df3=df3.reindex(columns=index_list) 


for item in update1_list: 
    df3[item[0]] = df1[item[1]] 
for item in update2_list: 
    df3[item[0]] = df2[item[1]] 

df3[['EMP_ID_STATUS','EMP_NAME_STATUS','EMP_LOCATION_STATUS']]='Not Matched' 



df1.loc[(df1['EMP_ID'] == df2['EMP_ID']),'EMP_ID_STATUS'] = 'Matched' 
df1.loc[(df1['EMP_NAME'] == df2['EMP_NAME']),'EMP_NAME_STATUS'] = 'Matched' 
df1.loc[(df1['EMP_LOCATION'] == df2['EMP_LOCATION']),'EMP_LOCATION_STATUS'] = 'Matched' 

df3.update(df1) 
print(df3) 

OUTPUT:

EMP_ID_S EMP_ID_T EMP_ID_STATUS EMP_NAME_S EMP_NAME_T EMP_NAME_STATUS \ 
0   1   1  Matched  Sam J  Sam J   Matched 
1   2   2  Matched  Man T  Man T   Matched 
2   3   3  Matched  Sub D  Sub D   Matched 
3   4   4  Matched Saggie D Saggie D   Matched 

    EMP_LOCATION_S EMP_LOCATION_T EMP_LOCATION_STATUS 
0  Houston Houston£[email protected]£   Not Matched 
1  Houston  Houston    Matched 
2  Chicago  Chicago    Matched 
3  New York New York^^^   Not Matched 

所以首先我創建df3=df3.reindex(columns=index_list)空數據幀的列從index_list

然後,我剛剛從df1df2

更新列 df3
for item in update1_list: 
     df3[item[0]] = df1[item[1]] 
    for item in update2_list: 
     df3[item[0]] = df2[item[1] 

[('EMP_ID_S', 'EMP_ID'), ('EMP_NAME_S', 'EMP_NAME'), ('EMP_LOCATION_S', 'EMP_LOCATION')]list(zip([['EMP_ID_T','EMP_NAME_T','EMP_LOCATION_T'],update1_list))是後的輸出爲每個項目[0]

EMP_ID_T設置DF3 [項目[0]] - > DF3 [ 'EMP_ID_T']DF1 [項目[1] ] - > df1 ['EMP_ID']。所以每個值都會被更新。

這是你喜歡什麼,

df1.loc[(df1['EMP_ID'] == df2['EMP_ID']),'EMP_ID_STATUS'] = 'Matched' 

df1.locEMP_ID_STATUS'Matched'只有df1['EMP_ID'] == df2['EMP_ID']滿足此條件列。所以對其他人也一樣,你有你想要的。

+0

此外,如果這有助於選擇回答。你可以在downvote下找到一個* tick *。點擊它。 – void