In [1]:
import pandas as pd

In [2]:
!pip install pygeocoder


Requirement already satisfied: pygeocoder in c:\programdata\anaconda3\lib\site-packages (1.2.5)
Requirement already satisfied: requests>=1.0 in c:\programdata\anaconda3\lib\site-packages (from pygeocoder) (2.22.0)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\programdata\anaconda3\lib\site-packages (from requests>=1.0->pygeocoder) (3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in c:\programdata\anaconda3\lib\site-packages (from requests>=1.0->pygeocoder) (2.8)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\programdata\anaconda3\lib\site-packages (from requests>=1.0->pygeocoder) (1.25.7)
Requirement already satisfied: certifi>=2017.4.17 in c:\programdata\anaconda3\lib\site-packages (from requests>=1.0->pygeocoder) (2019.11.28)

In [3]:
from pygeocoder import Geocoder
apik='' #file-bol illeszd be

In [25]:
results = Geocoder(apik).geocode("FSEGA Cluj")
print(results[0].coordinates)


(46.773181, 23.620944)

A válaszban az összes Google Maps cím-tulajdonság benne van. https://developers.google.com/maps/documentation/geocoding/start?csw=1#Types


In [40]:
results[0].country


Out[40]:
'Strada Teodor Mihali 58-60, Cluj-Napoca 400591, Romania'

In [32]:
results[0].city


Out[32]:
'Cluj-Napoca'

In [34]:
results[0].county


Out[34]:
'Municipiul Cluj - Napoca'

In [35]:
results[0].postal_code


Out[35]:
'400591'

In [41]:
results[0].formatted_address


Out[41]:
'Strada Teodor Mihali 58-60, Cluj-Napoca 400591, Romania'

Fordított geokódolás


In [44]:
results = Geocoder(apik).reverse_geocode(46.544151, 24.560025)
print(results[0])


Piața Trandafirilor nr. 23, Târgu Mureș, Romania

In [45]:
results[0].city


Out[45]:
'Târgu Mureș'

Alkalmazás


In [46]:
df=pd.read_excel('df5.xlsx')

In [51]:
results = Geocoder(apik).geocode('Hungary')
print(results[0].coordinates)


(47.162494, 19.5033041)

Geokódólás és hibakezelés


In [ ]:
koordinatak=[]
for orszag in list(df['Destinatie_tara2']):
    try:
        koord=Geocoder(apik).geocode(orszag)[0].coordinates
        koordinatak.append(koord)
        print(orszag,'geokódolva')
    except:
        print(orszag,'hiba')
        if orszag=='Cseh':
            koord=Geocoder(apik).geocode('Czech Republic')[0].coordinates
            koordinatak.append(koord)
            print(orszag,'geokódolva másodszorra')

In [65]:
df['koord']=koordinatak

Két új oszlopot készítünk a koordinátákból, mert külön kell választani a hosszúságot és a szélességet. Itt három String függvényt alkalmazunk az str előtaggal. Ugyanakkor először str típusba konvertáljuk azt a Dataframe oszlpot, amelyre szükségünk van, a végén pedig a szélességeket és hosszúságokat vissza számmá, azaz float típusba.


In [80]:
df['lat']=df['koord'].astype(str).str.split(',').str[0].str.replace('(','').astype(float)
df['lon']=df['koord'].astype(str).str.split(',').str[1].str.replace(')','').astype(float)

Kimentjük a viz-t Flourishba


In [82]:
df.to_excel('koordinatak.xlsx')