pandas.DataFrame.apply # 数据框。apply ( func , axis = 0 , raw = False , result_type = None , args = () , by_row = 'compat' , engine = 'python' , engine_kwargs = None , ** kwargs ) [来源] # 沿 DataFrame 的轴应用函数。 传递给该函数的对象是 Series 对象,其索引是 DataFrame 的索引 ( axis=0) 或 DataFrame 的列 ( axis=1)。默认情况下 ( result_type=None),最终返回类型是根据所应用函数的返回类型推断的。否则,它取决于result_type参数。 参数: 函数函数应用于每列或行的函数。 轴{0 或 'index', 1 或 'columns'}, 默认 0应用函数的轴: 0 或“index”:将函数应用于每一列。 1 或“列”:将函数应用于每一行。 原始布尔值,默认 False确定行或列是否作为 Series 或 ndarray 对象传递: False:将每行或列作为一个 Series 传递给函数。 True:传递的函数将接收 ndarray 对象。如果您只是应用 NumPy 归约函数,这将获得更好的性能。 result_type {'expand', 'reduce', 'broadcast', None}, 默认 None这些仅在axis=1(列)时起作用: 'expand' :类似列表的结果将变成列。 'reduce' :如果可能的话返回一个系列,而不是扩展类似列表的结果。这与“扩展”相反。 'broadcast' :结果将广播到 DataFrame 的原始形状,原始索引和列将保留。 默认行为(无)取决于所应用函数的返回值:类似列表的结果将作为一系列结果返回。但是,如果 apply 函数返回一个 Series,那么它们将扩展为列。 参数元组除了数组/系列之外,还要传递给func 的位置参数。 by_row False 或“compat”,默认“compat”func仅当func 是 listlike 或 dictlike 且 func 不是字符串时才有效。如果“compat”,如果可能的话,将首先将 func 转换为 pandas 方法(例如Series().apply(np.sum)将转换为 Series().sum())。如果这不起作用,将尝试再次调用 apply by_row=True,如果失败,将再次调用 apply by_row=False(向后兼容)。如果为 False,函数将立即传递到整个系列。 2.1.0 版本中的新增功能。 引擎{'python', 'numba'}, 默认 'python'在 apply 中选择 python(默认)引擎或 numba 引擎。 numba 引擎将尝试 JIT 编译传递的函数,这可能会导致大型 DataFrame 的加速。它还支持以下engine_kwargs: nopython(以nopython模式编译函数) nogil(释放JIT编译函数内的GIL) 并行(尝试在 DataFrame 上并行应用该函数) 注意:由于 numba/pandas 与 numba 交互方式的限制,您应该仅在 raw=True 时使用此选项 注意:numba 编译器仅支持有效的 Python/numpy 操作的子集。 请阅读有关numba 中支持的 python 功能 和支持的 numpy 功能的更多信息 ,以了解您可以或不能在传递的函数中使用哪些功能。 2.2.0 版本中的新增内容。 engine_kwargs字典将关键字参数传递给引擎。目前仅由 numba 引擎使用,请参阅引擎参数的文档以获取更多信息。 **夸格作为关键字参数传递给 func 的其他关键字参数。 返回: 系列或数据框func沿 DataFrame 给定轴应用的结果。 也可以看看 DataFrame.map用于元素运算。 DataFrame.aggregate只执行聚合类型的操作。 DataFrame.transform只执行转换类型操作。 笔记 改变传递的对象的函数可能会产生意外的行为或错误,因此不受支持。 有关更多详细信息,请参阅使用用户定义函数 (UDF) 方法进行变异。 例子 >>> df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B']) >>> df A B 0 4 9 1 4 9 2 4 9 使用 numpy 通用函数(在本例中与 相同 np.sqrt(df)): >>> df.apply(np.sqrt) A B 0 2.0 3.0 1 2.0 3.0 2 2.0 3.0 在任一轴上使用缩减函数 >>> df.apply(np.sum, axis=0) A 12 B 27 dtype: int64 >>> df.apply(np.sum, axis=1) 0 13 1 13 2 13 dtype: int64 返回类似列表的结果将是一个系列 >>> df.apply(lambda x: [1, 2], axis=1) 0 [1, 2] 1 [1, 2] 2 [1, 2] dtype: object 传递result_type='expand'会将类似列表的结果扩展到数据框的列 >>> df.apply(lambda x: [1, 2], axis=1, result_type='expand') 0 1 0 1 2 1 1 2 2 1 2 在函数内返回 Series 与传递类似 result_type='expand'。生成的列名称将是系列索引。 >>> df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1) foo bar 0 1 2 1 1 2 2 1 2 传递result_type='broadcast'将确保相同的形状结果,无论函数返回类似列表还是标量,并沿轴广播它。生成的列名称将是原始列名称。 >>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast') A B 0 1 2 1 1 2 2 1 2