maxframe.dataframe.DataFrame.applymap#

DataFrame.applymap(func, na_action=None, dtypes=None, dtype=None, skip_infer=False, **kwargs)#

对 DataFrame 的每个元素应用一个函数。

此方法将一个接受并返回标量的函数应用于 DataFrame 的每个元素。

参数:
  • func (callable) -- Python 函数,从单个值返回单个值。

  • na_action ({None, 'ignore'}, default None) -- 如果为 'ignore',则传播 NaN 值,而不将其传递给 func。

  • dtypes (Series, default None) -- 指定返回的 DataFrame 的数据类型。

  • dtype (np.dtype, default None) -- 指定返回的 DataFrame 所有列的数据类型,仅在未指定 dtypes 时有效。

  • skip_infer (bool, default False) -- 当未指定 dtypes 或 dtype 时是否推断数据类型。

  • **kwargs -- 传递给 func 的额外关键字参数。

返回:

转换后的 DataFrame。

返回类型:

DataFrame

参见

DataFrame.apply

沿 DataFrame 的输入轴应用函数。

DataFrame.replace

to_replace 中的值替换为 value

Series.map

对 Series 的每个元素应用函数。

示例

>>> import maxframe.dataframe as md
>>> df = md.DataFrame([[1, 2.12], [3.356, 4.567]])
>>> df.execute()
       0      1
0  1.000  2.120
1  3.356  4.567
>>> df.map(lambda x: len(str(x))).execute()
   0  1
0  3  4
1  5  5

与 Series.map 类似,可以忽略 NA 值:

>>> df_copy = df.copy()
>>> df_copy.iloc[0, 0] = md.NA
>>> df_copy.map(lambda x: len(str(x)), na_action='ignore').execute()
     0  1
0  NaN  4
1  5.0  5

也可以使用非 lambda 函数与 map 一起使用:

>>> df.map(round, ndigits=1).execute()
     0    1
0  1.0  2.1
1  3.4  4.6

注意,通常存在 func 的向量化版本,其速度会快得多。你可以对每个数字进行逐元素平方。

>>> df.map(lambda x: x**2).execute()
           0          1
0   1.000000   4.494400
1  11.262736  20.857489

但在这种情况下最好避免使用 map。

>>> (df ** 2).execute()
           0          1
0   1.000000   4.494400
1  11.262736  20.857489