通过从另一个cs中提取值来附加一个csv

2024-10-01 04:59:26 发布

您现在位置:Python中文网/ 问答频道 /正文

CSV列中有一列是大的,其中一列包含地址。在另一个CSV中,给出了纬度和经度的地址。我想匹配地址,拉纬度和经度,写我的第一个大csv。在

我确实尝试过使用pandas join和merge,但是它们与index column合并,我需要在address 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 实现输出的最简单方法是什么。在

我使用的是python3.x版本和Pandas的更新版本 感谢每一个帮助提前感谢


Tags: csvstreetpandas地址col2col3col1addr
2条回答

你可以做两个数据帧的内部合并。然后df.to\U csv('输出.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

在固定地址数据的情况下,通常是这样做的:

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

相关问题 更多 >