我有一个名为'tourdata'的pandas数据帧,由676k行数据组成。其中两列是纬度和经度。
使用reverse_geocode包我想将这些坐标转换为国家数据。
我打电话的时候:
import reverse_geocode as rg
tourdata['Country'] = rg.search((row[tourdata['latitude']],row[tourdata['longitude']]))
我收到错误:
ValueErrorTraceback(最近一次调用最后一次) in() 1 coordinates =(tourdata ['latitude'],tourdata ['经度']), ----> 2 tourdata ['Country'] = rg.search((row [tourdata ['latitude']],row [tourdata ['longitude']]))
〜/安纳康达/ ENVS / PY3 / LIB / python3.6 /站点包/ reverse_geocode /的初始化的.py 在搜索(坐标) 114“”“ 115 gd = GeocodeData() - > 116返回gd.query(坐标) 117 118
〜/安纳康达/ ENVS / PY3 / LIB / python3.6 /站点包/ reverse_geocode /的初始化的.py 在查询中(自我,坐标) 46除了ValueError为e: 47 logging.info('无法解析坐标:{}'。format(coordinates)) ---> 48提高e 49其他: 50个结果= [索引中索引的[self.locations [index]]
〜/安纳康达/ ENVS / PY3 / LIB / python3.6 /站点包/ reverse_geocode /的初始化的.py 在查询中(自我,坐标) 43“”“ 44尝试: ---> 45个距离,indices = self.tree.query(坐标,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列。
答案 0 :(得分:1)
搜索方法需要一个坐标列表。要获得单个数据点,您可以使用“get”方法。
尝试:
tourdata['country'] = tourdata.apply(lambda x: rg.get((x['latitude'], x['longitude'])), axis=1)
它适用于我:
import pandas as pd
tourdata = pd.DataFrame({'latitude':[0.3, 2, 0.6], 'longitude':[12, 5, 0.8]})
tourdata['country'] = tourdata.apply(lambda x: rg.get((x['latitude'], x['longitude'])), axis=1)
tourdata['country']
输出:
0 {'country': 'Gabon', 'city': 'Booué', 'country...
1 {'country': 'Sao Tome and Principe', 'city': '...
2 {'country': 'Ghana', 'city': 'Mumford', 'count...
Name: country, dtype: object