为了账号安全,请及时绑定邮箱和手机立即绑定

我想帮助优化带有 if in 语句的三重 for 循环

我想帮助优化带有 if in 语句的三重 for 循环

临摹微笑 2021-10-26 17:07:17
我正在一个包含近 7 万个条目的数据帧上执行三重 for 循环。我该如何优化它?我的最终目标是创建一个包含地震事件所在国家/地区的新列。我有一个纬度、经度和“地点”(例如:“阿拉斯加北 Nenana 北 17 公里”)列。我试图逆向地理编码,但有 68,488 个条目,没有免费服务可以让我这样做。作为学生,我负担不起。所以我使用一个带有国家列表的数据框和一个带有州列表的数据框来与 USGS['place'] 的值进行比较。为此,我最终决定使用 3 个 for 循环。正如您可以假设的那样,这需要很长时间。我希望有一种方法可以加快速度。我正在使用 python,但我也使用 r。for 循环在 python 上运行得更好。我会采取任何更好的选择。USGS = pd.DataFrame(data = {'latitide':[64.7385, 61.116], 'longitude':[-149.136, -138.655], 'place':['17km N of North Nenana, Alaska', '74km WNW of Haines Junction, Canada'], 'country':[NA, NA]})states = pd.DataFrame(data = {'state':['AK', 'AL'], 'name':['Alaska', 'Alabama']})countries = pd.DataFrame(data = {'country':['Afghanistan', 'Canada']})for head in states:    for state in states[head]:        for p in USGS['place']:            if state in p:                USGS['country'] = USGS['country'].map({p : 'United 'States'})# I have not finished the code for the countries dataframe
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

您确实可以选择进行地理编码。Mapquest 提供每月 15,000 次免费通话。您还可以查看使用geopy,这是我使用的。


import pandas as pd

import geopy

from geopy.geocoders import Nominatim



USGS_df = pd.DataFrame(data = {'latitude':[64.7385, 61.116], 'longitude':[-149.136, -138.655], 'place':['17km N of North Nenana, Alaska', '74km WNW of Haines Junction, Canada'], 'country':[None, None]})


geopy.geocoders.options.default_user_agent = "locations-application"

geolocator=Nominatim(timeout=10) 




for i, row in USGS_df.iterrows():

    try:

        lat = row['latitude']

        lon = row['longitude']


        location = geolocator.reverse('%s, %s' %(lat, lon))

        country = location.raw['address']['country']


        print ('Found: ' + location.address)


        USGS_df.loc[i, 'country'] = country


    except:

        print ('Location not identified: %s, %s' %(lat, lon))

输入:


print (USGS_df)

   latitude  longitude                                place country

0   64.7385   -149.136       17km N of North Nenana, Alaska    None

1   61.1160   -138.655  74km WNW of Haines Junction, Canada    None

输出:


print (USGS_df)

   latitude  longitude                                place country

0   64.7385   -149.136       17km N of North Nenana, Alaska     USA

1   61.1160   -138.655  74km WNW of Haines Junction, Canada  Canada


查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信