我加载了一个包含许多列的数据帧,其中一列包括地址。我使用python地理编码器模块来获取csv中每个地址的lat/long。在
熊猫
1)如何添加新列?我应该在排列行时添加列,还是应该在开始处添加列?在
2)在下面的代码中,我尝试遍历数据帧中的每一行。每排,我都在表演地理编码器.google()方法。我的csv/数据帧的第16列包含一个地址。在
在遍历所有行时,如何引用地址列?如果我按原样运行代码,就会得到“IndexError:tuple index out of range”。在
CSV
3)我代码的第二部分对CSV模块做了类似的事情。我在CSV中读取,遍历每一行并执行前面提到的geocoder方法。geocoder方法返回2个值的列表(2个坐标-[XXXX,XXXX])。我试着写原始的行,然后再写两个列,每个列都有两个坐标。我得到了“TypeError:只能将list(而不是”float“)连接到list”
import geocoder
import csv
import pandas as pd
import time
df = pd.read_csv("RSM100_1995.csv",header=None)
print(df.head())
for row in df.iterrows():
g = geocoder.google(row[16])
print(row[16],g.latlng)
time.sleep(2)
with open("RSM100_1995.csv","r") as f, open("RSM_GCTest.csv","w",newline='') as g:
rdr = csv.reader(f)
wtr = csv.writer(g)
for r in rdr:
gc = geocoder.google(str(r[16]))
print(r[16],gc.latlng)
wtr.writerow(r + gc.latlng[0]+gc.latlng[1])
time.sleep(2)
顺便说一下,我正在使用时间。睡觉(2) 因为地理编码器对请求的数量有限制。我不会像这里那样运行代码,只需要这样来显示它。在
如果有人有更好的方法使用Python对英国地址进行地理编码,请告诉我。在
编辑:
对于希拉格-我已经做了你提到的改变。我尝试用列索引(16)替换下面代码中的Address,结果相同。在
我用X.columns添加了列标题
我现在收到一条很长的错误消息,链接了许多不同的文件。在
^{pr2}$关于CSV-有17个专栏,我在上面给它们起了标题。“地址”列是我想通过地理编码器传递的列。地址列本身是“PAON”、“SAON”、“Street”、“Locality”、“country”和“Postcode”的串联。我也可以把“城市”也包括进来,但是我用CSV模块做的所有连接。在
如果有帮助-以下是Geocoder链接:
http://geocoder.readthedocs.io/
编辑2:
RS1995 = pd.read_csv("RSM100_1995.csv",header=None)
RS1995.columns = ['ID','Price','Date','Postcode','X','Y','Z','PAON','SAON','Street','Locality','District','City','County','A','B','Address','XX']
print(RS1995.head())
RS1995['lat'] = "x"
RS1995['lng'] = "y"
print(RS1995.head())
for row in RS1995.iterrows():
print(row)
每当我运行上面的代码时,我就会得到这个。我只举最后两个例子。这是什么意思?我该如何安排每一行,对地址进行地理编码,然后等待2秒,这样我就不会超过速率限制?公司名称:
(98, ID {40E4DAC0-863F-42FE-94B4-49A70D3BE0B9}
Price 43000
Date 24/02/1995 00:00
Postcode WS12 3XJ
X S
Y N
Z F
PAON 1
SAON NaN
Street WOODFORD WAY
Locality HEATH HAYES
District CANNOCK
City CANNOCK CHASE
County STAFFORDSHIRE
A A
B A
Address 1 WOODFORD WAY HEATH HAYES STAFFORDSHIRE WS12...
XX 1 WOODFORD WAY HEATH HAYES STAFFORDSHIRE WS12...
lat x
lng y
Name: 98, dtype: object)
(99, ID {061625F8-82D5-43CF-A55F-4288979D31EC}
Price 42995
Date 01/09/1995 00:00
Postcode PO1 5AY
X T
Y N
Z F
PAON 67
SAON NaN
Street BYERLEY ROAD
Locality PORTSMOUTH
District PORTSMOUTH
City PORTSMOUTH
County PORTSMOUTH
A A
B A
Address 67 BYERLEY ROAD PORTSMOUTH PORTSMOUTH PO1 5AY
XX 67 BYERLEY ROAD PORTSMOUTH PORTSMOUTH PO1 5AY
lat x
lng y
Name: 99, dtype: object)
可以在pandas数据帧中创建新列,类似于使用关联数组或字典的方式。可以为纬度和经度创建两个新列,如下所示:
然后可以将整个数据帧写入csv:
^{pr2}$相关问题 更多 >
编程相关推荐