我有一个大的CSV,其中有几列,其中一列是地址列。在另一个CSV中,给出了带有纬度和经度的地址。我想匹配地址并拉取纬度和经度并写下我的第一个大型csv。
我确实尝试使用熊猫加入和合并,但它们与索引列合并,我需要在地址 csv 中搜索地址,然后将 lat-lon 拉到大 csv 并创建两个新列。
我发现了一些类似的问题,但那是Ruby :Here:我想使用Python和Pandas。
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版本和熊猫的更新版本感谢每一个帮助 提前感谢
您通常的做法,地址数据已修复:
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')
您可以对 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