【发布时间】:2018-11-13 22:12:57
【问题描述】:
我有一个名为“tourdata”的 pandas 数据框,由 676k 行数据组成。其中两列是纬度和经度。
使用 reverse_geocode 包我想将这些坐标转换为国家数据。
当我打电话时:
import reverse_geocode as rg
tourdata['Country'] = rg.search((row[tourdata['latitude']],row[tourdata['longitude']]))
我得到了错误:
ValueErrorTraceback(最后一次调用) 在 () 1 坐标 = (tourdata['latitude'],tourdata['longitude']), ----> 2 tourdata['Country'] = rg.search((row[tourdata['latitude']],row[tourdata['longitude']]))
~/anaconda/envs/py3/lib/python3.6/site-packages/reverse_geocode/init.py 在搜索中(坐标) 114 """ 115 gd = 地理编码数据() --> 116 返回 gd.query(坐标) 117 118
~/anaconda/envs/py3/lib/python3.6/site-packages/reverse_geocode/init.py 在查询中(自我,坐标) 46 除了 ValueError 作为 e: 47 logging.info('无法解析坐标:{}'.format(coordinates)) ---> 48 加注 其他 49 条: 50 个结果 = [self.locations[index] for index in indices]
~/anaconda/envs/py3/lib/python3.6/site-packages/reverse_geocode/init.py 在查询中(自我,坐标) 43 """ 44 尝试: ---> 45 距离,索引 = self.tree.query(coordinates, k=1) 46 除了 ValueError 作为 e: 47 logging.info('无法解析坐标:{}'.format(coordinates))
scipy.spatial.ckdtree.cKDTree.query() 中的ckdtree.pyx
ValueError: x 必须由长度为 2 但形状为 (2, 676701)
测试包是否正常工作:
coordinates = (tourdata['latitude'][0],tourdata['longitude'][0]),
results = (rg.search(coordinates))
print(results)
输出:
[{'country_code': 'AT', 'city': 'Wartmannstetten', 'country': 'Austria'}]
对此的任何帮助表示赞赏。理想情况下,我想访问结果字典并仅将国家代码应用于 Country 列。
【问题讨论】:
-
通常在 python 中,您使用 map() 将函数应用于所有项目,但我对 pandas 的 exp 很少 - 所以可能会有所不同
-
tourdata['country'] = tourdata.apply(lambda x: rg.search(x['latitude'], x['longitude']), axis=1)? -
感谢@ScottBoston - 当我尝试这个时,我得到:
TypeError: ('search() takes 1 positional argument but 2 were given', 'occurred at index 0') -
看来你需要
tourdata['country'] = tourdata.apply(lambda x: rg.search(tuple([x['latitude'], x['longitude'])]), axis=1)? -
谢谢@HarvIpan - 这次我得到以下信息:
TypeError: ('tuple() takes at most 1 argument (2 given)', 'occurred at index 0')
标签: python-3.x pandas geocoding