搜索

查看: 3143|回复: 11

[Python] Pandas计算元素的数量和频率的方法(出现的次数)

[复制链接]
发表于 2023-5-4 17:20:01 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:20:01 3143 11 看全部
目录
  • pandas.Series.unique():返回NumPy数组ndarray中唯一元素值的列表
  • pandas.Series.value_counts():返回唯一元素的值及其在出现的次数。
  • pandas.Series.nunique(), pandas.DataFrame.nunique():返回int,pandas.Series中唯一元素的数量。
  • 唯一元素的数量(不包括重复项的)
  • 唯一元素值列表
  • 唯一元素的频率(出现次数)
  • 独特元素及其出现的字典
  • 模式及其频率
  • mode()
  • describe()
  • 归一化频率在pandas.Series的pandas.DataFrame列中,将描述获取唯一元素数(不包括重复项的案例数)和每个元素的出现频率(出现数)的方法。
    使用pandas.Series方法的unique(),value_counts()和nunique()。还提供了nunique()作为pandas.DataFrame的方法。
    在这里:
  • pandas.Series.unique():返回NumPy数组ndarray中唯一元素值的列表
  • pandas.Series.value_counts():返回唯一元素的值及其在出现的次数。
  • pandas.Series.nunique(), pandas.DataFrame.nunique():返回int,pandas.Series中唯一元素的数量。
    在解释了基本用法之后,对一下内容进行介绍。
  • 唯一元素的数量(不包括重复项的)
  • 唯一元素值列表
  • 唯一元素的频率(出现次数)
  • 独特元素及其出现的字典
  • 模式及其频率
  • 归一化频率
    以下面的数据为例。
    import pandas as pd
    import numpy as np
    df = pd.read_csv('./data/15/sample_pandas_normal.csv')
    df.iloc[1] = np.nan
    print(df)
    #       name   age state  point
    # 0    Alice  24.0    NY   64.0
    # 1      NaN   NaN   NaN    NaN
    # 2  Charlie  18.0    CA   70.0
    # 3     Dave  68.0    TX   70.0
    # 4    Ellen  24.0    CA   88.0
    # 5    Frank  30.0    NY   57.0
    pandas.Series.unique():返回NumPy数组ndarray中唯一元素值的列表
    unique()返回唯一元素值的列表。一维NumPy数组ndarray类型而不是列表类型(Python内置类型)。还包括缺失值NaN。
    u = df['state'].unique()
    print(u)
    print(type(u))
    # ['NY' nan 'CA' 'TX']
    #

    pandas.Series.value_counts():返回唯一元素的值及其在出现的次数。
    value_counts()返回pandas.Series,其中唯一元素的值是index,出现的次数是data。当需要元素的频率(出现次数)时使用此选项。
    vc = df['state'].value_counts()
    print(vc)
    print(type(vc))
    # NY    2
    # CA    2
    # TX    1
    # Name: state, dtype: int64
    #
    默认情况下,它按出现次数的降序排序,但是如果参数ascending = True,则以升序排序,如果参数sort = False,则不进行排序。
    print(df['state'].value_counts(ascending=True))
    # TX    1
    # CA    2
    # NY    2
    # Name: state, dtype: int64
    print(df['state'].value_counts(sort=False))
    # CA    2
    # NY    2
    # TX    1
    # Name: state, dtype: int64
    默认情况下,NaN被排除,但如果参数dropna = False,则也计入NaN。
    print(df['state'].value_counts(dropna=False))
    # NY     2
    # CA     2
    # TX     1
    # NaN    1
    # Name: state, dtype: int64
    如果指定了参数normalize = True,则将值归一化,以使总数变为1。
    请注意,如果包含缺失值NaN,则该值将根据参数dropna的设置而有所不同。
    print(df['state'].value_counts(dropna=False, normalize=True))
    # NY     0.333333
    # CA     0.333333
    # TX     0.166667
    # NaN    0.166667
    # Name: state, dtype: float64

    pandas.Series.nunique(), pandas.DataFrame.nunique():返回int,pandas.Series中唯一元素的数量。
    pandas.Series.nunique()以整数int形式返回唯一元素的数量。
    默认情况下,不包含NaN,并且如果指定了参数dropna = False,则结果还将包含NaN。
    nu = df['state'].nunique()
    print(nu)
    print(type(nu))
    # 3
    #
    print(df['state'].nunique(dropna=False))
    # 4
    pandas.DataFrame.nunique()计算每列的唯一元素数。返回pandas.Series类型。
    默认情况下,不包含NaN,并且如果指定了参数dropna = False,则结果还将包含NaN。
    默认情况下,该值为每列,但是如果参数axis = 1或axis =‘columns’,则返回每行的值。
    nu_col = df.nunique()
    print(nu_col)
    print(type(nu_col))
    # name     5
    # age      4
    # state    3
    # point    4
    # dtype: int64
    #
    print(df.nunique(dropna=False))
    # name     6
    # age      5
    # state    4
    # point    5
    # dtype: int64
    print(df.nunique(dropna=False, axis='columns'))
    # 0    4
    # 1    1
    # 2    4
    # 3    4
    # 4    4
    # 5    4
    # dtype: int64
    唯一元素的数量(不包括重复项的)
    如上所述,pandas.Series.nunique()和pandas.DataFrame.nunique()可以计算唯一元素的数量(唯一元素的数量)。
    print(df['state'].nunique())
    # 3
    print(df.nunique())
    # name     5
    # age      4
    # state    3
    # point    4
    # dtype: int64
    唯一元素值列表
    使用unique(),您可以获取NumPy数组ndarray类型的唯一元素值的列表。如果要使用列表类型(Python内置类型),则可以使用tolist()方法将其转换。
    print(df['state'].unique().tolist())
    print(type(df['state'].unique().tolist()))
    # ['NY', nan, 'CA', 'TX']
    #
    可以将tolist()方法应用于通过value_counts()获得的pandas.Series的索引。也可以作为NumPy数组ndarray类型的值来获取。
    print(df['state'].value_counts().index.tolist())
    print(type(df['state'].value_counts().index.tolist()))
    # ['NY', 'CA', 'TX']
    #
    print(df['state'].value_counts(dropna=False).index.values)
    print(type(df['state'].value_counts().index.values))
    # ['NY' 'CA' 'TX' nan]
    #
    如上所述,在unique()的情况下,始终包含NaN,但是value_counts()可以指定参数dropna是否包含NaN。

    唯一元素的频率(出现次数)
    要获取每个唯一元素的频率(出现次数),请访问通过value_counts()获得的pandas.Series的值。
    print(df['state'].value_counts()['NY'])
    # 2
    print(df['state'].value_counts().NY)
    # 2
    使用iteritems()方法检索for循环中的元素值和频率(出现次数)。
    for index, value in df['state'].value_counts().iteritems():
        print(index, ': ', value)
    # NY :  2
    # CA :  2
    # TX :  1

    独特元素及其出现的字典
    也可以将to_dict()方法应用于value_counts()获得的pandas.Series使其成为字典。
    d = df['state'].value_counts().to_dict()
    print(d)
    print(type(d))
    # {'NY': 2, 'CA': 2, 'TX': 1}
    #
    print(d['NY'])
    # 2
    使用items()方法在for循环中检索元素值和频率(出现次数)。
    for key, value in d.items():
        print(key, ': ', value)
    # NY :  2
    # CA :  2
    # TX :  1

    模式及其频率
    默认情况下,value_counts()返回pandas.Series,它以出现次数的降序排列,因此顶部是最频繁出现的值及其频率。
    print(df['state'].value_counts())
    # NY    2
    # CA    2
    # TX    1
    # Name: state, dtype: int64
    print(df['state'].value_counts().index[0])
    # NY
    print(df['state'].value_counts().iat[0])
    # 2
    原始pandas.Series的元素成为所得pandas.Series的索引。当数值为索引时,无法使用[Number]指定该值(这会导致错误),因此严格使用iat [Number]进行指定。 (由于示例是字符串,因此[Number]无关紧要)
    使用apply()方法将其应用于pandas.DataFrame的每一列。
    Pandas中map(),applymap(),apply()函数的使用方法
    print(df.apply(lambda x: x.value_counts().index[0]))
    # name     Frank
    # age         24
    # state       NY
    # point       70
    # dtype: object
    print(df.apply(lambda x: x.value_counts().iat[0]))
    # name     1
    # age      2
    # state    2
    # point    2
    # dtype: int64
    如果存在多种模式,则上述方法只能获得一种模式。

    mode()
    pandas.Series的mode()方法将模式值返回为pandas.Series。如果使用tolist()列出此结果,则可以将模式值作为列表获取。请注意,即使只有一种模式,也将是一个列表。
    print(df['state'].mode())
    # 0    CA
    # 1    NY
    # dtype: object
    print(df['state'].mode().tolist())
    # ['CA', 'NY']
    print(df['age'].mode().tolist())
    # [24.0]
    使用apply()方法将mode()应用于每列将产生具有列表类型元素的pandas.Series()。
    s_mode = df.apply(lambda x: x.mode().tolist())
    print(s_mode)
    # name     [Alice, Charlie, Dave, Ellen, Frank]
    # age                                    [24.0]
    # state                                [CA, NY]
    # point                                  [70.0]
    # dtype: object
    print(type(s_mode))
    #
    print(s_mode['name'])
    # ['Alice', 'Charlie', 'Dave', 'Ellen', 'Frank']
    print(type(s_mode['name']))
    #
    mode()也作为pandas.DataFrame的方法提供。返回pandas.DataFrame。由于各列的模式数不同,所以空缺部分成为缺失值NaN。
    print(df.mode())
    #       name   age state  point
    # 0    Alice  24.0    CA   70.0
    # 1  Charlie   NaN    NY    NaN
    # 2     Dave   NaN   NaN    NaN
    # 3    Ellen   NaN   NaN    NaN
    # 4    Frank   NaN   NaN    NaN
    可以使用count()方法获得每列中的模式数,该方法对不缺少值NaN的元素数进行计数。
    print(df.mode().count())
    # name     5
    # age      1
    # state    2
    # point    1
    # dtype: int64
    describe()
    同样,正如我在开始时所写的那样,describe()方法可用于共同计算每一列的唯一元素的数量,模式值及其频率(出现的次数)。每个项目都可以使用loc []获得。
    print(df.astype('str').describe())
    #          name   age state point
    # count       6     6     6     6
    # unique      6     5     4     5
    # top     Frank  24.0    CA  70.0
    # freq        1     2     2     2
    print(df.astype('str').describe().loc['top'])
    # name     Frank
    # age       24.0
    # state       CA
    # point     70.0
    # Name: top, dtype: object
    在describe()中,由列类型dtype计算出的项是不同的,因此使用astype()进行类型转换(转换)。

    归一化频率
    如上所述,当将value_counts()的参数归一化设置为True时,将归一化以使总数变为1的值被返回。
    请注意,如果包含缺失值NaN,则该值将根据参数dropna的设置而有所不同。
    比较多个数据的频率分布时,很方便。
    print(df['state'].value_counts(dropna=False, normalize=True))
    # NY     0.333333
    # CA     0.333333
    # TX     0.166667
    # NaN    0.166667
    # Name: state, dtype: float64
    到此这篇关于Pandas计算元素的数量和频率(出现的次数)的文章就介绍到这了,更多相关Pandas计算元素数量和频率内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-28 21:53:25 | 显示全部楼层
    贺老师 2023-6-28 21:53:25 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-28 23:17:14 | 显示全部楼层
    墙和鸡蛋 2023-6-28 23:17:14 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

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

    使用道具 举报

    发表于 2023-6-29 11:25:41 | 显示全部楼层
    米老鼠和蓝精鼠v 2023-6-29 11:25:41 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-29 13:07:03 | 显示全部楼层
    当当当当裤裆坦 2023-6-29 13:07:03 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-29 18:34:32 | 显示全部楼层
    贰十岁装成熟装s 2023-6-29 18:34:32 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-29 19:08:27 | 显示全部楼层
    123456809 2023-6-29 19:08:27 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    发表于 2023-6-30 09:35:12 | 显示全部楼层
    执着等待等wc 2023-6-30 09:35:12 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-30 15:36:56 | 显示全部楼层
    心随674 2023-6-30 15:36:56 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

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

    本版积分规则 返回列表

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