2017-02-23 13 views
3

2つのcsvファイルが2つの列で構成されています。2つのcsvファイルとpython pandasを比較する

最初のIDは製品IDで、2番目のIDはシリアル番号です。

私は、最初のcsvからすべてのシリアル番号を検索し、2番目のcsvで一致するものを探す必要があります。結果レポートには、一致したシリアル番号と、各csvからの対応する製品IDが別の列に表示されます 以下のコードを修正することを怠りません。

これにどのようにアプローチしますか?

import pandas as pd 
    A=set(pd.read_csv("c1.csv", index_col=False, header=None)[0]) #reads the csv, takes only the first column and creates a set out of it. 
    B=set(pd.read_csv("c2.csv", index_col=False, header=None)[0]) #same here 
    print(A-B) #set A - set B gives back everything thats only in A. 
    print(B-A) # same here, other way around. 
+0

あなたはいくつかのサンプルデータと所望の出力を追加することはできますか?正確に何が必要なのかは少し不明なので。 – jezrael

答えて

4

私はあなたがmergeが必要だと思う:

A = pd.DataFrame({'product id': [1455,5452,3775], 
        'serial number':[44,55,66]}) 

print (A) 

B = pd.DataFrame({'product id': [7000,2000,1000], 
        'serial number':[44,55,77]}) 

print (B) 

print (pd.merge(A, B, on='serial number')) 
    product id_x serial number product id_y 
0   1455    44   7000 
1   5452    55   2000 
+0

わずかな修正が必要ですが、値をハードコーディングする代わりに、上記のスニペットで入力として2つのファイル名を与える方法はありますか? – poyim

-1
first_one=pd.read_csv(file_path) 
//same way for second_one 
// if product_id is the first column then its location would be at '0' 
len_=len(first_one) 
i=0 
while(len_!=0) 
{ 
if(first_one[i]==second_one[i]) 
{ 
//it is a match do whatever you want with this matched data 
i=i-1; 
} 
len_=len_-1; 
} 
3

はこれを試してみてください:

A = pd.read_csv("c1.csv", header=None, usecols=[0], names=['col']).drop_duplicates() 
B = pd.read_csv("c2.csv", header=None, usecols=[0], names=['col']).drop_duplicates() 
# A - B 
pd.merge(A, B, on='col', how='left', indicator=True).query("_merge == 'left_only'") 
# B - A 
pd.merge(A, B, on='col', how='right', indicator=True).query("_merge == 'right_only'") 
0

あなたがデータを比較しながら、インデックスを無視すること、セットにDFを変換することができ、使用してくださいset symmetric_difference

ds1 = set([ tuple(values) for values in df1.values.tolist()]) 
ds2 = set([ tuple(values) for values in df2.values.tolist()]) 

ds1.symmetric_difference(ds2) 
print df1 ,'\n\n' 
print df2,'\n\n' 

print pd.DataFrame(list(ds1.difference(ds2))),'\n\n' 
print pd.DataFrame(list(ds2.difference(ds1))),'\n\n' 

DF1

id Name score isEnrolled    Comment 
0 111 Jack 2.17  True He was late to class 
1 112 Nick 1.11  False    Graduated 
2 113 Zoe 4.12  True     NaN 

DF2

id Name score isEnrolled    Comment 
0 111 Jack 2.17  True He was late to class 
1 112 Nick 1.21  False    Graduated 
2 113 Zoe 4.12  False   On vacation 

出力

 0  1  2  3   4 
0 113 Zoe 4.12 True  NaN 
1 112 Nick 1.11 False Graduated 


    0  1  2  3   4 
0 113 Zoe 4.12 False On vacation 
1 112 Nick 1.21 False Graduated 
関連する問題