• pandas.DataFrame.apply,DataFrame.applymap,Series.map



    apply

    我们想在 DataFrame 的每行或者每列上都执行某个函数,可以使用 DataFrame 的 apply 方法。

    例如,我们想计算下面 DataFrame 每列的最大值最小值之差:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'),
                      index=['Baidi', 'Wuyi', 'Changan', 'Changshan'])
    print(df)
    """
                      b         d         e
    Baidi      1.671894  0.902370  0.008920
    Wuyi      -0.368150  0.265574  1.538348
    Changan   -0.491342 -0.073567  0.257416
    Changshan  1.703614  1.007506 -1.837523
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    f = lambda x: x.max() - x.min()
    df.apply(f)
    """
    b    2.194956
    d    1.081073
    e    3.375870
    dtype: float64
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果会返回一个 Series,其 indexdfcolumn

    applyaxis 参数,默认为 0,即对每列做运算,如果将其指定为 1 或者 ‘columns’,则会对每行做运算:

    df.apply(f, axis='columns')
    """
    Baidi        1.662974
    Wuyi         1.906497
    Changan      0.748758
    Changshan    3.541137
    dtype: float64
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    传入 apply 的函数不是必须返回标量值的,也可以返回类似 Series 这样的对象:

    def f(x):
        return pd.Series([x.min(), x.max()], index=['min', 'max'])
    
    • 1
    • 2
    df.apply(f)
    """
                b         d         e
    min -0.491342 -0.073567 -1.837523
    max  1.703614  1.007506  1.538348
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    大多数常见的统计方法(例如 summean)都是 DataFrame 的方法,因此除非我们需要做一些特别的运算,否则并不需要使用 apply 方法。

    Series 也有 apply 方法,用法大致相同,且没有axis 参数。


    applymap

    如果我们想对 DataFrame 中的每个元素都运行我们自己定义的函数,可以使用 applymap 方法。例如:

    format = lambda x: '%.2f' % x
    df.applymap(format)
    """
                   b      d      e
    Baidi       1.67   0.90   0.01
    Wuyi       -0.37   0.27   1.54
    Changan    -0.49  -0.07   0.26
    Changshan   1.70   1.01  -1.84
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    map

    Series 中对应 applymap 的方法为 map

    df['e'].map(format)
    """
    Baidi         0.01
    Wuyi          1.54
    Changan       0.26
    Changshan    -1.84
    Name: e, dtype: object
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    References

    Python for Data Analysis, 2 n d ^{\rm nd} nd edition. Wes McKinney.

  • 相关阅读:
    94后字节P7晒出工资单:狠补了这个,真不错...
    微信机器人终端1.0未来的设想就是做成telegram一样强大的机器人群体集控终端
    Ubuntu 22.04 无法使用网易云音乐
    Leetcode39.组合总和
    CSS 字体颜色渐变
    C++基础——类与对象
    页面上下左右滑动事件
    uni-app:实现等待加载功能
    面向对象继承:ES5继承和ES6继承:extends、super()
    一百九十一、Flume——Flume配置文件各参数含义(持续完善中)
  • 原文地址:https://blog.csdn.net/myDarling_/article/details/127959470