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

目录
  • 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']
# <class 'numpy.ndarray'>

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
# <class 'pandas.core.series.Series'>

默认情况下,它按出现次数的降序排序,但是如果参数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
# <class 'int'>

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
# <class 'pandas.core.series.Series'>

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']
# <class 'list'>

可以将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']
# <class 'list'>

print(df['state'].value_counts(dropna=False).index.values)
print(type(df['state'].value_counts().index.values))
# ['NY' 'CA' 'TX' nan]
# <class 'numpy.ndarray'>

如上所述,在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}
# <class 'dict'>

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))
# <class 'pandas.core.series.Series'>

print(s_mode['name'])
# ['Alice', 'Charlie', 'Dave', 'Ellen', 'Frank']

print(type(s_mode['name']))
# <class 'list'>

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计算元素数量和频率内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pandas中遍历dataframe的每一个元素的实现

    假如有一个需求场景需要遍历一个csv或excel中的每一个元素,判断这个元素是否含有某个关键字 那么可以用python的pandas库来实现. 方法一: pandas的dataframe有一个很好用的函数applymap,它可以把某个函数应用到dataframe的每一个元素上,而且比常规的for循环去遍历每个元素要快很多.如下是相关代码: import pandas as pd data = [["str","ewt","earw"],[&quo

  • 浅谈Pandas:Series和DataFrame间的算术元素

    如下所示: import numpy as np import pandas as pd from pandas import Series,DataFrame 一.Series与Series s1 = Series([1,3,5,7],index=['a','b','c','d']) s2 = Series([2,4,6,8],index=['a','b','c','e']) 索引对齐项相加,不对齐项的值取NaN s1+s2 1 a 3.0 b 7.0 c 11.0 d NaN e NaN d

  • Pandas 同元素多列去重的实例

    有一些问题可能会遇到同元素多列去重问题,下面介绍一种非常简单效率也很快的做法,用pandas来实现. 首先我们看一下数据类型: G1 G2 a b b a c d d c e f 对这样的两列数据进行同元素去重,最终得到结果为: G1 G2 a b c d e f 代码如下: #-*- coding: utf-8 -*- data = {'G1':['a','b','c','d','e'],'G2':['b','a','d','c','f']} data = pd.DataFrame(data)

  • 详解pandas获取Dataframe元素值的几种方法

    可以通过遍历的方法: pandas按行按列遍历Dataframe的几种方式:https://www.jb51.net/article/172623.htm 选择列 使用类字典属性,返回的是Series类型 data['w'] 遍历Series for index in data['w'] .index: time_dis = data['w'] .get(index) pandas.DataFrame.at 根据行索引和列名,获取一个元素的值 >>> df = pd.DataFrame(

  • 浅谈python已知元素,获取元素索引(numpy,pandas)

    目前搜索到的方法有: np.where('元素') 还有就是pandas的方法: df.index('元素') 但是第二个方法的问题就是会报错,嗯,这就比较尴尬了,查询了网上的解决方案,有这样的: 此外使用 df[df['列名'].isin([相应的值])] 这个命令会输出等于该值的行. 此外如果想快速找到dataframe最后几行的话,可以使用的方法是tail,可以获取若干行的值 以上这篇浅谈python已知元素,获取元素索引(numpy,pandas)就是小编分享给大家的全部内容了,希望能给

  • pandas.dataframe中根据条件获取元素所在的位置方法(索引)

    在dataframe中根据一定的条件,得到符合要求的某行元素所在的位置. 代码如下所示: df = pd.DataFrame({'BoolCol': [1, 2, 3, 3, 4],'attr': [22, 33, 22, 44, 66]}, index=[10,20,30,40,50]) print(df) a = df[(df.BoolCol==3)&(df.attr==22)].index.tolist() print(a) df如下所示,以上通过选取"BoolCol"取

  • Pandas DataFrame中的tuple元素遍历的实现

    pandas中遍历dataframe的每一个元素 假如有一个需求场景需要遍历一个csv或excel中的每一个元素,判断这个元素是否含有某个关键字 那么可以用python的pandas库来实现. 方法一: pandas的dataframe有一个很好用的函数applymap,它可以把某个函数应用到dataframe的每一个元素上,而且比常规的for循环去遍历每个元素要快很多.如下是相关代码: import pandas as pd data = [["str","ewt"

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

    目录 pandas.Series.unique():返回NumPy数组ndarray中唯一元素值的列表 pandas.Series.value_counts():返回唯一元素的值及其在出现的次数. pandas.Series.nunique(), pandas.DataFrame.nunique():返回int,pandas.Series中唯一元素的数量. 唯一元素的数量(不包括重复项的) 唯一元素值列表 唯一元素的频率(出现次数) 独特元素及其出现的字典 模式及其频率 mode() descr

  • python 使用pandas计算累积求和的方法

    使用pandas下的cumsum函数 cumsum:计算轴向元素累积加和,返回由中间结果组成的数组.重点就是返回值是"由中间结果组成的数组" import numpy as np ''' arr是一个2*2*3三维矩阵,索引值为0,1,2 cumsum(0):实现0轴上的累加:以最外面的数组元素为单位,以[[1,2,3],[8,9,12]]为开始实现后面元素的对应累加 cumsum(1):实现1轴上的累加:以中间数组元素为单位,以[1,2,3]为开始,实现后面元素的对应累加 cumsu

  • 使用pandas计算环比和同比的方法实例

    目录 前言 1.数据准备 2.环比计算 3.同比计算 4.关于pct_change()函数 5.后记 前言 在进行业务数据分析时,往往需要使用pandas计算环比.同比及增长率等指标,为了能够更加方便的进行的统计数据,整理方法如下. 1.数据准备 为方便进行演示,此处提前生成需要进行统计的数据,数据已经是按照时间维度进行排序. months = pd.date_range(start='2010-01-01', end='2020-12-31', freq='M') test_df = pd.D

  • PHP编程计算文件或数组中单词出现频率的方法

    本文实例讲述了PHP编程计算文件或数组中单词出现频率的方法.分享给大家供大家参考,具体如下: 如果是小文件,可以一次性读入到数组中,使用方便的数组计数函数进行词频统计(假设文件中内容都是空格隔开的单词): <?php $str = file_get_contents("/path/to/file.txt"); //get string from file preg_match_all("/\b(\w+[-]\w+)|(\w+)\b/",$str,$r); //

  • Python利用pandas计算多个CSV文件数据值的实例

    功能:扫描当前目录下所有CSV文件并对其中文件进行统计,输出统计值到CSV文件 pip install pandas import pandas as pd import glob,os,sys input_path='./' output_fiel='pandas_union_concat.csv' all_files=glob.glob(os.path.join(input_path,'sales_*')) all_data_frames=[] for file in all_files:

  • pandas计算最大连续间隔的方法

    如下所示: 群里一朋友发了一个如上图的问题,解决方法如下 data = {'a':[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2],'b':[1,2,3,4,5,8,9,10,1,2,3,6,7,8,9,12,13]} df = pd.DataFrame(data) for name,group in df.groupby('a'): group['c'] = ((group['b'].shift(1).fillna(0) + 1).astype(int) != group

  • python 统计列表中不同元素的数量方法

    刚刚上网搜了一下如何用python统计列表中不同元素的数量,发现很少,找了半天.我自己来写一种方法. 代码如下 list=[1,1,2,2,3] print(list) set1=set(list) print(set1) print(len(set1)) #len(set1)即为列表中不同元素的数量 得到结果: [1, 1, 2, 2, 3] {1, 2, 3} 3 原理就是set集合中不允许重复元素出现. 以上这篇python 统计列表中不同元素的数量方法就是小编分享给大家的全部内容了,希望

  • Python pandas 计算每行的增长率与累计增长率

    读取数据: FacebookDf=pd.read_excel(r'D:\jupyter\Untitled Folder\Facebook2017年股票数据.xlsx',index_col='Date') FacebookDf.tail() 计算当前行比上一行增长的百分比(每行的增长率) # .pct_change()返回变化百分比,第一行因没有可对比的,返回Nan,填充为0 # apply(lambda x: format(x, '.2%'))将小数点转换为百分数 FacebookDf['pct

  • Pandas 计算相关性系数corr()方式

    目录 Pandas 计算相关性系数corr() 相关:数据之间有关联,相互有影响 相关性系数:衡量相关性强弱的 构造如下数据 pandas相关系数-DataFrame.corr()参数 参数说明 Pandas 计算相关性系数corr() 相关:数据之间有关联,相互有影响 如:A和B 存在一定的相关性,A对B存在一定程度的影响,A变化,B也会有一定的变化 如果A和B相等 或者 B可以由A经过计算得到---->完全相关 如果B是由 A和C计算得到 ---->并且 A可以计算出B的大部分 -----

随机推荐