Python:反向地理编码以获取Pandas中的城市名称和州名称

2024-09-28 17:23:11 发布

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

我有一个关于纬度和经度的大数据集,我想在它们前面绘制城市和州的地图。我使用的方法是:

import pandas as pd
import reverse_geocoder as rg 
import pprint 

df = pd.read_csv("D:\data.csv")
def reverseGeocode(coordinates): 
    result = rg.search(coordinates)
    # result is a list containing ordered dictionary. 
    pprint.pprint(result)  

# Driver function 
if __name__=="__main__": 

    # Coordinates tuple.Can contain more than one pair.
    for i in range(2):
        coordinates =(df['latitude'][i],df['longitude'][i])
        reverseGeocode(coordinates)

输出:

[OrderedDict([('lat', '13.322'),
              ('lon', '75.774'),
              ('name', 'Chikmagalur'),
              ('admin1', 'Karnataka'),
              ('admin2', 'Chikmagalur'),
              ('cc', 'IN')])]
[OrderedDict([('lat', '18.083'),
              ('lon', '73.416'),
              ('name', 'Mahad'),
              ('admin1', 'Maharashtra'),
              ('admin2', 'Raigarh'),
              ('cc', 'IN')])]

我想做的是-



    id  latitude    longitude   name    admin2  admin1
0   23  13.28637    75.78518
1   29  17.90387    73.43351
2   34  15.72967    74.49182
3   48  20.83830    73.26416
4   54  21.93931    75.13398
5   71  20.92673    75.32402
6   78  19.26049    73.38982
7   108 17.90468    73.43486
8   109 13.28637    75.78518
9   113 15.72934    74.49189
10  126 20.83830    73.26417
11  131 21.93930    75.13399
12  146 20.92672    75.32402
13  152 19.26049    73.38982
14  171 17.90657    73.43382

在我的数据帧(df)中[“latitude”,“longitude”]前面映射名称admin1和admin2


Tags: csv数据nameimportdfasresultrg
2条回答

方法如下:

if __name__=="__main__": 

    df = pd.Dataframe(columns = ['latitude','longitude'])
    # Coordinates tuple.Can contain more than one pair.
    for i in range(2):
        coordinates =(df['latitude'][i],df['longitude'][i])
        res = reverseGeocode(coordinates)
        lat = res[0]['lat']
        long = res[0]['lon']
        df = df.append([{ 'latitude': lat, 'longitude': long}])

虽然其他解决方案可能有效,但您可以找到更优雅的解决方案:

import pandas as pd
import reverse_geocoder as rg 
import pprint 

df = pd.read_csv("data.csv")

def reverseGeocode(coordinates): 
    result = rg.search(coordinates)
    return (result)

if __name__=="__main__": 

    # Coordinates tuple.Can contain more than one pair.
    coordinates =list(zip(df['latitude'],df['longitude'])) # generates pair of (lat,long)
    data = reverseGeocode(coordinates)

    df['name'] = [i['name'] for i in data]
    df['admin1'] = [i['admin1'] for i in data]
    df['admin2'] = [i['admin2'] for i in data]

df.to_csv("data_appended.csv") # write to csv # result will be saved to data_appended.csv

Output

相关问题 更多 >