2016-04-23 4 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 

КОД

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') 

Я получаю исключение KeyError для Ссылки на сайты e, когда я запускаю его, могут ли быть пробелы в данных, которые вызывают проблему? Данные разделены запятой.

ответ

1

Скорее всего, у вас есть либо ведущие, либо завершающие пробелы в столбце reference после чтения ваших файлов CSV.

вы можете проверить это следующим образом:

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

вы можете "исправить" это путем добавления sep=r'\s*,\s*' параметра в ваших pd.read_csv() вызовов

Пример:

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:

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 
Смежные вопросы