2016-04-23 10 views
0

私はPython Pandasを使用して、CSV2の参照をCSV1のデータと照合し、新しい出力ファイルを作成しています。Python PandasはCSV keyerrorを比較します

CSV1

reference,name,house 
234 8A,john,37 
564 68R,bill,3 
RT4 VV8,kate,88 
76AA,harry ,433 

CSV2

reference 
234 8A 
RT4 VV8 

CODE

import pandas as pd 
    df1 = pd.read_csv(r'd:\temp\data1.csv') 
    df2 = pd.read_csv(r'd:\temp\data2.csv') 
    df3 = pd.merge(df1,df2, on= 'reference', how='inner') 
    df3.to_csv('outpt.csv') 

私はreferencためKeyError例外を取得していますeを実行すると、問題の原因となっているデータのスペースになる可能性がありますか?データはコンマで区切られています。

答えて

1

ほとんどの場合、CSVファイルを読み取った後、先頭に空白または末尾に空白のいずれかがあります(reference列)。

あなたはこの方法でそれを確認することができます。

In [74]: df1 
Out[74]: 
    reference name house 
0 234 8A john  37 
1 564 68R bill  3 
2 RT4 VV8 kate  88 
3  76AA harry  433 

In [75]: df2 
Out[75]: 
    reference 
0  234 8A 
1 RT4 VV8 

In [76]: df2.columns.tolist() 
Out[76]: ['reference '] 

In [77]: df1.columns.tolist() 
Out[77]: ['reference', 'name', 'house'] 

In [78]: df1.merge(df2, on='reference') 

... 

KeyError: 'reference' 

df2固定:

print(df1.columns.tolist()) 
print(df2.columns.tolist()) 

をあなたのpd.read_csv()通話

例にsep=r'\s*,\s*'パラメータを追加することで、それを "修正" することができます

data = """\ 
reference 
234 8A 
RT4 VV8""" 
df2 = pd.read_csv(io.StringIO(data), sep=r'\s*,\s*') 

現在動作中:

In [80]: df1.merge(df2, on='reference') 
Out[80]: 
    reference name house 
0 234 8A john  37 
1 RT4 VV8 kate  88 
関連する問題