Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列添加到数据帧&;遍历其中一列_Python_Google Maps_Pandas_Gis_Geocode - Fatal编程技术网

Python 将列添加到数据帧&;遍历其中一列

Python 将列添加到数据帧&;遍历其中一列,python,google-maps,pandas,gis,geocode,Python,Google Maps,Pandas,Gis,Geocode,我在一个数据框中加载了许多列,其中一列包含一个地址。我使用PythonGeocoder模块获取此csv中每个地址的lat/long 熊猫 1) 如何添加新列?我应该在逐行排列时添加列,还是应该在开始时添加列 2) 在下面的代码中,我尝试遍历数据帧中的每一行。对于每一行,我都执行geocoder.google()方法。我的csv/数据框的第16列包含一个地址 在遍历所有行时,如何引用该地址列?如果按原样运行代码,我会得到“IndexError:元组索引超出范围” CSV 3) 我的代码的第二部分对

我在一个数据框中加载了许多列,其中一列包含一个地址。我使用PythonGeocoder模块获取此csv中每个地址的lat/long

熊猫

1) 如何添加新列?我应该在逐行排列时添加列,还是应该在开始时添加列

2) 在下面的代码中,我尝试遍历数据帧中的每一行。对于每一行,我都执行geocoder.google()方法。我的csv/数据框的第16列包含一个地址

在遍历所有行时,如何引用该地址列?如果按原样运行代码,我会得到“IndexError:元组索引超出范围”

CSV

3) 我的代码的第二部分对CSV模块做了类似的事情。我在CSV中读取,循环每一行并执行前面提到的geocoder方法。geocoder方法返回2个值(2个坐标-[XXXX,XXXX])的列表。我试图写入原始行,然后再写入两列,每个列都有两个坐标。我得到“TypeError:只能将列表(而不是“float”)连接到列表”

顺便说一下,我使用的是time.sleep(2),因为地理编码器对请求的数量有限制。我不会像这里那样运行代码,只是像这样放置以显示它

如果有人有更好的方法使用Python对英国地址进行地理编码,请告诉我


编辑:

对于希拉格,我已经做了你提到的改变。我试着用具有相同结果的列索引(16)替换下面代码中的“Address”

我添加了带有X列的列标题

我现在收到一条很长的错误消息,链接了许多不同的文件

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())
for row in RS1995.iterrows():
    RS1995['lat'] = geocoder.google(RS1995['Address']).latlng[0]
    RS1995['lng'] = geocoder.google(RS1995['Address']).latlng[1]
    print(RS1995.head())
    time.sleep(2)
就CSV而言,共有17列,我在上面给它们加了标题。“地址”列是我想通过地理编码器传递的。地址列本身是“PAON”、“SAON”、“Street”、“Location”、“County”和“Postcode”的串联。我本可以把“城市”也包括在内,但我使用CSV模块所做的所有连接

如果有帮助-这里是地理编码器链接:


编辑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)

可以在数据框中创建新列,类似于使用关联数组或字典的方式。您可以为纬度和经度创建两个新列,如下所示:

df['lat'] = geocoder.google(df[16]).latlng[0]
df['lng'] = geocoder.google(df[16]).latlng[1]
然后,您可以将整个数据帧写入csv:

df.to_csv('RSM_GCTest.csv')

这似乎是可行的,但收到一长串错误,例如:ValueError:序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。这非常有趣。我不知道你为什么会犯这些错误,因为我们并没有试图评估一个系列的真实性。但是,您能告诉我您是如何构建输入csv文件的吗?我可以试着在本地运行。我会在几个小时后回复。我现在还有一些其他的东西要处理,我已经在这个问题的主要部分添加了一个答案。
df.to_csv('RSM_GCTest.csv')