代码之家  ›  专栏  ›  技术社区  ›  ASH

Geopy Geocoders以一种方式返回正确的结果,但不能以另一种方式

  •  0
  • ASH  · 技术社区  · 1 年前

    我正在找一些大学的地址。如果我这样做,一切都很好。

    import pandas as pd
    import numpy as np
    import pandas as pd
    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent='ryan-data')
    
    import pandas as pd
    
    df = ['Rutgers University, New Jersey',
            'Bucknell University, Pennsylvania',
            'Colgate University, New York',
            'Cornell University, New York',
            'Syracuse University, New York']
    
    df = pd.DataFrame(df)
    df.columns=['school']
    df.head()
    
    df['location'] = df['school'].apply(lambda x: geolocator.geocode(x))
    df.head()
    

    当我这样做的时候,一切都会好起来的。但是,如果我从CSV文件中读取了完全相同的地址,就像这样。

    try:
         df['location'] = df['school'].apply(lambda x: geolocator.geocode(x))
    except:
         df['location'] = 'not found'
        
    df.head()
    

    完全相同的代码总是抛出错误。我不想把每一个地址都打出来。我只想从CSV中阅读并获得结果。我该怎么做?

    0 回复  |  直到 1 年前
        1
  •  0
  •   ASH    1 年前

    它和这个一起工作。

    import warnings
    warnings.filterwarnings('ignore')
    
    import pandas as pd
    from geopy.geocoders import Nominatim
    from geopy.extra.rate_limiter import RateLimiter
    
    #Creating an instance of Nominatim Class
    geolocator = Nominatim(user_agent="my_request")
     
    #applying the rate limiter wrapper
    geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)
     
    # applying the method to pandas DataFrame
    try:
        df['Location'] = df['Address'].apply(geocode)
        df['Lat'] = df['Location'].apply(lambda x: x.latitude if x else None)
        df['Lon'] = df['Location'].apply(lambda x: x.longitude if x else None)
    except:
        df['Location'] = 'none found'