2

pandarallel在我的数据帧上运行 .apply 方法时使用所有内核时,我遇到了以前从未见过的语法。相反,这是一种我不理解的使用点语法的方式。

import pandas as pd
from pandarallel import pandarallel

df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b'])


到目前为止一切顺利,只是设置了一个数据框。接下来,为了pandarallel准备好,我们做

pandarallel.initialize()


接下来是我感到困惑的一点:要使用 pandarallel,我们在数据帧上调用此方法

df.parallel_apply(func)


我的问题是:如果数据框是使用库df实例化的,并且没有调用方法,那么 Python 是如何知道在对象上使用该方法的?pandaspandasparallel_applypandarallelpandas

我认为这与初始化有关,但我以前从未见过这种情况,而且我不明白后端发生了什么。

4

2 回答 2

3

它似乎发生在initialize

DataFrame.parallel_apply = parallelize(*args)

似乎 Dataframes 允许稍后添加属性,这就是这里发生的事情。parallelize似乎是一个工厂函数,它根据传递的args. 它似乎正在创建充当方法的函数,并且它创建的该方法被分配给parallel_apply.

于 2020-08-25T13:50:24.937 回答
3

您可以为先前创建的对象创建方法:

def my_func(self):
    return 2*self


pd.DataFrame.my_method = my_func

df.my_method()

a   b
2   8
4  10
6  12

你甚至可以传递参数:

def sum_x(self, x):
    return self+x

pd.DataFrame.sum_x = sum_x

df.sum_x(3)
a  b
4  7
5  8
6  9

第一个参数将是self类中的常用方法。

于 2020-08-25T13:56:09.337 回答