搜索

查看: 3117|回复: 11

[Python] Pandas中map(),applymap(),apply()函数的使用方法

[复制链接]
发表于 2023-5-4 17:23:36 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:23:36 3117 11 看全部
目录
  • 指定pandas对象作为NumPy函数的参数
  • 元素的应用
  • 行/列的应用
  • pandas.DataFrame,pandas.Series方法
  • Pandas对象方法的函数应用
  • 适用于Series的每个元素:map(),apply()
  • 应用于DataFrame的每个元素:applymap()
  • 应用于DataFrame的每行和每列:apply()
  • 应用于DataFrame的特定行/列元素将函数应用于pandas对象(pandas.DataFrame,pandas.Series)时,根据所应用的函数类型以及是否将其应用于元素,行或列,使用的方法会有所不同。
    指定pandas对象作为NumPy函数的参数
  • 将Pandas对象指定为函数参数
  • 是否将其应用于元素,行或列取决于函数的类型和参数的设置而有所不同
  • Pandas对象中的一些方法
    Pandas对象方法的函数应用
    元素功能(标量值)
  • 适用于Series的每个元素:map(),apply()
  • 应用于DataFrame的每个元素:applymap()
    行和列的功能(一维数组)
  • 应用于DataFrame的每行和每列:apply()
    用以下csv文件作为示例进行说明。
    a,b,c,d
    11,12,13,14
    21,22,23,24
    31,32,33,34

    import pandas as pd
    import numpy as np
    df = pd.read_csv('./data/06/sample_header.csv')
    print(df)
    #     a   b   c   d
    # 0  11  12  13  14
    # 1  21  22  23  24
    # 2  31  32  33  34
    指定pandas对象作为NumPy函数的参数
    可以将Pandas对象指定为NumPy函数的参数。

    元素的应用
    NumPy的通用函数(ufunc:应用于数组元素的函数)适用于pandas对象的每个元素。
    绝对值(fabs()),平方根(sqrt()),log(log())等。
    print(np.sqrt(df))
    #           a         b         c         d
    # 0  3.316625  3.464102  3.605551  3.741657
    # 1  4.582576  4.690416  4.795832  4.898979
    # 2  5.567764  5.656854  5.744563  5.830952

    行/列的应用
    如果将pandas对象指定为从NumPy数组的所有元素计算值的函数的参数,则默认情况下它将应用于pandas对象的每列。如果参数轴= 1,则将其应用于每行。
    最大值(amax()),最小值(amin()),平均值(mean())等。
    print(np.amax(df))
    # a    31
    # b    32
    # c    33
    # d    34
    # dtype: int64
    print(np.mean(df, axis=1))
    # 0    12.5
    # 1    22.5
    # 2    32.5
    # dtype: float64
    pandas.DataFrame,pandas.Series方法
    最大值,最小值,平均值,方差等也被准备为Pandas对象的方法,因此也可以直接使用它们。
    同样,在这种情况下,默认情况下也会将其应用于每一列,并且如果参数axis = 1,则会将其应用于每一行。
    print(df.max())
    # a    31
    # b    32
    # c    33
    # d    34
    # dtype: int64
    print(df.max(axis=1))
    # 0    14
    # 1    24
    # 2    34
    # dtype: int64
    Pandas对象方法的函数应用
    可以使用pandas对象方法将函数应用于元素,行和列。您可以应用Python内置函数或您定义的函数。
  • 应用于Series的每个元素:map(),apply()
  • 应用于DataFrame的每个元素:applymap()
  • 应用于DataFrame的每行和每列:apply()
  • 应用于DataFrame的特定行/列元素
    以上方法都返回一个新的已处理的对象,而原始对象则保持不变。没有像dropna()或fillna()那样的参数,因此,如果想更改原始对象本身时,
    df = df.applymap(function)
    如上,用原始对象替换新对象并覆盖它。

    适用于Series的每个元素:map(),apply()
    将Python内置函数,匿名函数(lambda)或def定义的函数传递给map()或apply()的参数。
    s = df['a']
    print(s)
    # 0    11
    # 1    21
    # 2    31
    # Name: a, dtype: int64
    f_brackets = lambda x: '[{}]'.format(x)
    print(s.map(f_brackets))
    # 0    [11]
    # 1    [21]
    # 2    [31]
    # Name: a, dtype: object
    def f_str(x):
        return str(x).replace('1', 'One').replace('2', 'Two').replace('3', 'Three').replace('4', 'Four')
    print(s.map(f_str))
    # 0      OneOne
    # 1      TwoOne
    # 2    ThreeOne
    # Name: a, dtype: object
    对于map(),如果将字典dict指定为参数,它将替换为元素。

    应用于DataFrame的每个元素:applymap()
    将Python的内置函数,匿名函数(lambda)或def定义的函数传递为applymap()的参数。
    f_oddeven = lambda x: 'odd' if x % 2 == 1 else 'even'
    print(df.applymap(f_oddeven))
    #      a     b    c     d
    # 0  odd  even  odd  even
    # 1  odd  even  odd  even
    # 2  odd  even  odd  even

    应用于DataFrame的每行和每列:apply()
    将适用于一维数组的函数传递给apply()的参数。默认情况下,它应用于每列,如果axis = 1,则应用于每行。
    f_maxmin = lambda x: max(x) - min(x)
    print(df.apply(f_maxmin))
    # a    20
    # b    20
    # c    20
    # d    20
    # dtype: int64
    print(df.apply(f_maxmin, axis=1))
    # 0    3
    # 1    3
    # 2    3
    # dtype: int64
    应用于DataFrame的特定行/列元素
    由于没有方法仅将功能应用于DataFrame的特定行/列元素,可执行以下方法。
  • 选择行/列并应用带有map()或apply()的功能
  • 覆盖原始行/列
    df['b'] = df['b'].map(f_str)
    print(df)
    #     a         b   c   d
    # 0  11    OneTwo  13  14
    # 1  21    TwoTwo  23  24
    # 2  31  ThreeTwo  33  34
    df.iloc[2] = df.iloc[2].map(f_str)
    print(df)
    #           a         b           c          d
    # 0        11    OneTwo          13         14
    # 1        21    TwoTwo          23         24
    # 2  ThreeOne  ThreeTwo  ThreeThree  ThreeFour
    到此这篇关于Pandas中map(),applymap(),apply()函数的使用方法的文章就介绍到这了,更多相关Pandas map(),applymap(),apply()内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 14:35:40 | 显示全部楼层
    掌舵的鱼1987 2023-6-29 14:35:40 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-29 15:49:25 | 显示全部楼层
    十二音阶囤 2023-6-29 15:49:25 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-29 22:51:56 | 显示全部楼层
    尘埃416 2023-6-29 22:51:56 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-30 02:48:55 | 显示全部楼层
    戏做顿 2023-6-30 02:48:55 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 15:00:08 | 显示全部楼层
    幸福341 2023-6-30 15:00:08 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-30 17:13:39 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-30 17:13:39 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-30 22:05:24 | 显示全部楼层
    素色流年783 2023-6-30 22:05:24 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    发表于 2023-7-3 06:47:04 | 显示全部楼层
    李志敏 2023-7-3 06:47:04 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-3 09:33:30 | 显示全部楼层
    惜颜705 2023-7-3 09:33:30 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表