Python 熊猫的多线程问题
我有一个非常大的excel文件,包含1000多个街道交叉口,我需要找到这些交叉口的经度和纬度,然后将这些信息写入文件/列表,供其他程序使用 我一直关注的是如何使用多线程/多处理构建一个更高效的脚本,我已经浏览了其他问题/帖子,但我发现这一切都有点混乱。下面的代码大约需要10分钟以上。任何帮助都会很好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
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非常快,但只适用于法语地址。我不知道其他人的情况。我不知道有任何(快速)免费的全球地址批量地理编码器(地址数量没有可笑的限制)。不幸的是,对于许多公司来说,这种经营似乎是一项非常有利可图的业务。