Python 熊猫的多线程问题

Python 熊猫的多线程问题,python,pandas,python-multithreading,geopy,Python,Pandas,Python Multithreading,Geopy,我有一个非常大的excel文件,包含1000多个街道交叉口,我需要找到这些交叉口的经度和纬度,然后将这些信息写入文件/列表,供其他程序使用 我一直关注的是如何使用多线程/多处理构建一个更高效的脚本,我已经浏览了其他问题/帖子,但我发现这一切都有点混乱。下面的代码大约需要10分钟以上。任何帮助都会很好 from geopy.geocoders import ArcGIS import pandas from datetime import datetime start_time = datet

我有一个非常大的excel文件,包含1000多个街道交叉口,我需要找到这些交叉口的经度和纬度,然后将这些信息写入文件/列表,供其他程序使用

我一直关注的是如何使用多线程/多处理构建一个更高效的脚本,我已经浏览了其他问题/帖子,但我发现这一切都有点混乱。下面的代码大约需要10分钟以上。任何帮助都会很好

from geopy.geocoders import ArcGIS
import pandas
from datetime import datetime


start_time = datetime.now()
def my_LatLong(address):
    n = ArcGIS().geocode(address)
    if n != None: 
        return n
    else:
        return [address,"None"]


df = pandas.read_excel("street_sample.xlsx",sheet_name=0)
count = 0
street_list = df.loc[:,"Description"]

new_list =[]
for i in list(street_list):
    location = my_LatLong(f"{i.split('-')[0]}, Vancouver, Canada")
    if location != None:
        new_list.append([f"{len(street_list)}, {list(location)}"])
        print(f"{count}/{len(street_list)} - {i} = Completed\t\t\t\t" ,end='\r')
    else:
        print(f"{count}/{len(street_list)} - {i} == None value \t\t\t",end='\r')

    count += 1

# doing something with new_list

endtime_time = datetime.now()

print (f"Program ran for:  {endtime_time -start_time}")
street_sample.xlsx

身份证件 描述 12501x 佐治亚州西1900-奥纳托街: 12501x 第四/第六次改道和第六次Ped-奥纳图街: 12501x 第4/6次改道和第6次Semi-ONAT_街: 12501x 雅培和科尔多瓦-奥纳特尤街: 12501x 雅培与世博会-奥纳托街: 12501x 雅培和黑斯廷斯-奥纳托街: 12501x 雅培和基弗-奥纳特尤街: 12501x 香港仔及金斯威-奥纳尤街: 12501x 阿尔伯塔省和第49街-奥纳特尤街:70175 12501x 奥尔德街和第12街-奥纳托街: 12501x 奥尔德街和第六街-奥纳托街: 12501x 阿尔德和百老汇-奥纳托街: 12501x 亚历山德拉和爱德华国王-奥纳图街: 12501x 阿尔玛和第十街-奥纳托街: 12501x 阿尔玛和第四街-奥纳特尤街: 12501x 阿尔玛和第6街-奥纳托街: 12501x 阿尔玛和百老汇-奥纳托街: 12501x 阿尔玛和灰角路-奥纳图街: 12501x 安德森和第二/拉米磨坊-奥纳托街: 12501x 安德森(格兰维尔)和第四大道-奥纳托街: 12501x 安格斯街和41街-奥纳图街: 12501x 安格斯和海事公司-奥纳图街: 12501x 杨梅和10号-奥纳托街: 12501x 杨梅和11号-奥纳托街: 12501x 杨梅和12号-奥纳托街: 12501x 杨梅和16号-奥纳托街: 12501x 杨梅和20号-奥纳托街: 12501x 杨梅和33号-奥纳托街: 12501x 杨梅和第四街-奥纳托街: 12501x 杨梅和第8街-奥纳托街: 12501x 杨梅和百老汇-奥纳托街: 12501x 杨梅和康沃尔-奥纳图街: 12501x 杨梅和爱德华国王-奥纳图街: 12501x 杨梅和拉赫布-奥纳图街:
问题不在于熊猫,而在于
ArcGIS().geocode(address)
,它的速度非常慢。事实上,在我的机器上,这条线路需要400毫秒/请求。每个请求都会向在线ArcGIS API发送一个缓慢的网络查询。使用多处理不会有多大帮助,因为您会很快达到附加限制(API请求的速率有限,网站饱和)。您需要发送批处理请求。不幸的是,
geopy
包似乎不支持这一点。如果您绑定到ArcGIS,则需要使用他们自己的API。您可以找到有关如何执行此操作的更多信息。

请尝试以下示例:@Aaron曾经在那里,但无法成功为其创建代码。如果您有更好的方法,请不要绑定到ArcGIS。有关免费/开源工具,您可以查看。Addok非常快,但只适用于法语地址。我不知道其他人的情况。我不知道有任何(快速)免费的全球地址批量地理编码器(地址数量没有可笑的限制)。不幸的是,对于许多公司来说,这种经营似乎是一项非常有利可图的业务。