在Python数据帧上并行化反向地理编码函数
我有一个熊猫数据框。在两列中,我有某些点的纬度和经度。在另一个名为city的列中,我想输入给定行的经纬度所属的城市的名称 我已经将数据帧上的纬度和经度列切成一个numpy数组。然后,我使用多处理库创建了一个小型并行映射函数,该函数接受numpy数组,将其拆分,将给定拆分的每个函数应用程序映射到计算机中的每个核心,以便最终它可以加入中间结果 然而,我未能正确地做到这一点。由于我对Python有些陌生,我想知道是否有更好的(甚至是标准的)方法来实现这一点 我的密码如下:在Python数据帧上并行化反向地理编码函数,python,pandas,numpy,dataframe,multiprocessing,Python,Pandas,Numpy,Dataframe,Multiprocessing,我有一个熊猫数据框。在两列中,我有某些点的纬度和经度。在另一个名为city的列中,我想输入给定行的经纬度所属的城市的名称 我已经将数据帧上的纬度和经度列切成一个numpy数组。然后,我使用多处理库创建了一个小型并行映射函数,该函数接受numpy数组,将其拆分,将给定拆分的每个函数应用程序映射到计算机中的每个核心,以便最终它可以加入中间结果 然而,我未能正确地做到这一点。由于我对Python有些陌生,我想知道是否有更好的(甚至是标准的)方法来实现这一点 我的密码如下: def reverse_co
def reverse_code( latitude, longitude ):
g = geocoder.google([latitude, longitude], method="reverse")
return g.city
def parallelize( data, func):
data_split = np.array_split(np.array_split(data,2), partitions)
pool = Pool(cores)
data = pd.concat(pool.map(func, data_split))
pool.close()
pool.join()
return data
cores = cpu_count()
partitions = cores
distritos = df[["latitud", "longitud"]].as_matrix
parallelize(distritos, reverse_code)
执行代码后,出现以下错误:
---------------------------------------------------------------------------
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
C:\ProgramData\Anaconda3\envs\jeptest\lib\site-packages\numpy\lib\shape_base.py in array_split(ary, indices_or_sections, axis)
457 try:
--> 458 Ntotal = ary.shape[axis]
459 except AttributeError:
AttributeError: 'function' object has no attribute 'shape'
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
<ipython-input-26-2af0d007a2f8> in <module>()
----> 1 parallelize(distritos, reverse_code)
<ipython-input-25-d2c492561bd2> in parallelize(data, func)
1 def parallelize( data, func):
----> 2 data_split = np.array_split(np.array_split(data,2), partitions)
3 pool = Pool(cores)
4 data = pd.concat(pool.map(func, data_split))
5 pool.close()
C:\ProgramData\Anaconda3\envs\jeptest\lib\site-packages\numpy\lib\shape_base.py in array_split(ary, indices_or_sections, axis)
458 Ntotal = ary.shape[axis]
459 except AttributeError:
--> 460 Ntotal = len(ary)
461 try:
462 # handle scalar case.
TypeError: object of type 'method' has no len()
---------------------------------------------------------------------------
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
C:\ProgramData\Anaconda3\envs\jeptest\lib\site packages\numpy\lib\shape\u base.py在数组中\u拆分(ary、索引或\u节、轴)
457试试:
-->458 Ntotal=ary.形状[轴]
459除属性错误外:
AttributeError:“函数”对象没有属性“形状”
在处理上述异常期间,发生了另一个异常:
TypeError回溯(最近一次调用上次)
在()
---->1并行化(发行版、反向代码)
并行化(数据、函数)
1 def并行化(数据,函数):
---->2数据分割=np.数组分割(np.数组分割(数据,2),分区)
3池=池(芯)
4 data=pd.concat(pool.map(func,data\u split))
5.关闭
C:\ProgramData\Anaconda3\envs\jeptest\lib\site packages\numpy\lib\shape\u base.py在数组中\u拆分(ary、索引或\u节、轴)
458 Ntotal=ary.形状[轴]
459除属性错误外:
-->460 Ntotal=len(ary)
461试试:
462#处理标量情况。
TypeError:类型为“method”的对象没有len()
distritos=df[[“latitud”,“longitud”]]。as_matrix
将distritos
分配给实例方法,而不是调用该方法。您需要使用()
调用它。您是对的。我添加了()代码,现在代码正在运行。你还有什么建议可以推荐吗?