2017-05-08 76 views
1

我有一個大的CSV,其中有幾列,其中一列是地址列。在另一個CSV中給出了經緯度的地址。我想匹配地址並拉取經緯度,然後寫入我的第一個大型csv。通過從另一個csv中提取值附加一個csv

我嘗試過使用熊貓加入和合並,但他們與索引列合併,我需要在地址CSV中搜索地址,然後將經緯度拉大到csv並創建兩個新列。

我發現了一些類似的問題,但畢竟是紅寶石:Here:我想用Python和熊貓

Large.csv 

col1, col2, col3, col4, col5, col6, addr 
234, 453,34535,342,634,636, Ken street 
562, 345,6753,835,864,967,St Pauls 

addr.csv 

addr,lat,lon 
baker street, lat1, lon1 
ken street, lat2,lon2 
paul street, lat3, lon3 
St Pauls, lat4, lon4 

Ouput.csv 
col1, col2, col3, col4, col5, col6, addr, lat, lon 
234, 453,34535,342,634,636, Ken street,lat2,lon2 
562, 345,6753,835,864,967,St Pauls,lat4,lon4 

輸入文件是太大,無法在Excel工作表中加載並作出VLOOKUP 工作有什麼事情是實現產出的最簡單方法。

我使用python 3.x版和熊貓 每個幫助的更新版本表示讚賞提前

+0

可能重複:http://stackoverflow.com/questions/20414562/python-joining-csv-files-where -key-is-first-column-value – moritzg

回答

1

感謝你能做到2個的數據幀的內合併。然後df.to_csv('Ouput.csv')將輸出數據幀寫入一個csv文件。

>>> df1 
    col1 col2 col3 col4 col5 col6  addr 
0 234 453 34535 342 634 636 Ken street 
1 562 345 6753 835 864 967 St Pauls 
>>> df2 
      addr lat lon 
0 baker street lat1 lon1 
1 Ken street lat2 lon2 
2 paul street lat3 lon3 
3  St Pauls lat4 lon4 
>>> df = pd.merge(df1, df2, how='inner', on='addr') 
>>> df 
    col1 col2 col3 col4 col5 col6  addr lat lon 
0 234 453 34535 342 634 636 Ken street lat2 lon2 
1 562 345 6753 835 864 967 St Pauls lat4 lon4 
1

這是你一般是怎麼做的,有地址的數據固定:

import sys 
if sys.version_info[0] < 3: 
    from StringIO import StringIO 
else: 
    from io import StringIO 

import pandas as pd 

large = StringIO('''col1, col2, col3, col4, col5, col6, addr 
234, 453,34535,342,634,636, Ken street 
562, 345,6753,835,864,967,St Pauls''') 

addr = StringIO('''addr,lat,lon 
baker street, lat1, lon1 
ken street, lat2,lon2 
paul street, lat3, lon3 
St Pauls, lat4, lon4''') 

df_large = pd.read_csv(large, sep=',') 
df_large.columns = df_large.columns.str.strip() 
df_large.addr = df_large.addr.apply(lambda x: x.lower().strip()) 

df_addr = pd.read_csv(addr, sep=',') 

df_addr.addr = df_addr.addr.apply(lambda x: x.lower().strip()) 

df_large = pd.merge(df_large, df_addr, how='left', on='addr') 
+0

非常感謝您的回答在少數地址中,案件可能會有所不同 –

+1

經過編輯可以使其一般起作用。 – zipa

相關問題