2. apply

  1. 你可以使用numpyufunc函数操作pandas对象。

  2. 有时,你希望将函数应用到由各列或者各行形成的一维数组上,此时DataFrame.apply()方法即可实现此功能。 .apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

    • func:一个可调用对象,它会应用于每一行或者每一列
    • axis:指定应用于行还是列。如果为0/'index',则沿着0轴计算(应用于每一列);如果为1/'columns',则沿着1轴计算(应用于每一行)。
    • broadcast:一个布尔值,如果为True,则结果为DataFrame(不足的部分通过广播来填充)
    • raw:一个布尔值。如果为False,则转换每一行/每一列为一个Series,然后传给 func 作为参数。如果True,则func接受到的是ndarray,而不是Series
    • reduce:一个布尔值。用于判断当DataFrame为空时,应该返回一个Series还是返回一个DataFrame。如果为True,则结果为Series;如果为False,则结果为DataFrame
    • args:传递给func的额外的位置参数(第一个位置参数始终为Series/ndarrayapply_df
  3. 有时,你希望将函数应用到DataFrame中的每个元素,则可以使用.applymap(func)方法。之所以不叫map,是因为Series已经有个.map方法。 applymap_df

  4. Series.apply()方法应用到Series的每个元素上: .apply(func, convert_dtype=True, args=(), **kwds)

    • func:一个可调用对象,它会应用于每个元素
    • convert_dtype:一个布尔值。如果为True,则pandas会自动匹配func结果的最佳dtype;如果为False,则dtype=object
    • args:传递给func的额外的位置参数。
    • kwds:传递给func的额外的关键字参数。

    返回结果可能是Series,也可能是DataFrame(比如,func返回一个Series) apply_series

  5. Series.map(arg,na_action=None)方法会应用到Series的每个元素上:

    • arg:一个函数、字典或者Series。如果为字典或者Series,则它是一种映射关系,键/index label就是自变量,值就是返回值。
    • na_action:如果为ignore,则忽略NaN

    返回相同index的一个Series map_series