在Python数据帧上并行化反向地理编码函数

在Python数据帧上并行化反向地理编码函数,python,pandas,numpy,dataframe,multiprocessing,Python,Pandas,Numpy,Dataframe,Multiprocessing,我有一个熊猫数据框。在两列中,我有某些点的纬度和经度。在另一个名为city的列中,我想输入给定行的经纬度所属的城市的名称 我已经将数据帧上的纬度和经度列切成一个numpy数组。然后,我使用多处理库创建了一个小型并行映射函数,该函数接受numpy数组,将其拆分,将给定拆分的每个函数应用程序映射到计算机中的每个核心,以便最终它可以加入中间结果 然而,我未能正确地做到这一点。由于我对Python有些陌生,我想知道是否有更好的(甚至是标准的)方法来实现这一点 我的密码如下: def reverse_co

我有一个熊猫数据框。在两列中,我有某些点的纬度和经度。在另一个名为city的列中,我想输入给定行的经纬度所属的城市的名称

我已经将数据帧上的纬度和经度列切成一个numpy数组。然后,我使用多处理库创建了一个小型并行映射函数,该函数接受numpy数组,将其拆分,将给定拆分的每个函数应用程序映射到计算机中的每个核心,以便最终它可以加入中间结果

然而,我未能正确地做到这一点。由于我对Python有些陌生,我想知道是否有更好的(甚至是标准的)方法来实现这一点

我的密码如下:

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
分配给实例方法,而不是调用该方法。您需要使用
()
调用它。您是对的。我添加了()代码,现在代码正在运行。你还有什么建议可以推荐吗?