2016-04-23 17 views
0

Ich benutze Python Pandas, um die Referenzen von CSV2 zu den Daten in CSV1 zu vergleichen und eine neue Ausgabedatei zu erstellen.Python Pandas vergleichen 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') 

Ich bin ein KeyError für referenc bekommen Wenn ich es ausführe, könnten es die Leerzeichen in den Daten sein, die das Problem verursachen? Die Daten sind durch Kommas getrennt.

Antwort

1

Höchstwahrscheinlich haben Sie in der Spalte reference nach dem Lesen Ihrer CSV-Dateien entweder führende oder nachgestellte Leerzeichen.

Sie können es auf diese Weise prüfen:

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

Sie können "reparieren" durch Zugabe sep=r'\s*,\s*' Parameter zu Ihrem pd.read_csv() Anrufe

Beispiel:

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 Festsetzung:

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

jetzt funktioniert es:

In [80]: df1.merge(df2, on='reference') 
Out[80]: 
    reference name house 
0 234 8A john  37 
1 RT4 VV8 kate  88 
Verwandte Themen