如何使用Pandas Value_Counts(笔记)

630 阅读15分钟

本教程将解释如何使用Pandas的value_counts方法来计算Python数据框中的数值。

它解释了value_counts的作用,语法如何工作,并提供了逐步的例子。

如果你需要特定的东西,你可以点击以下任何一个链接。

目录。

好的。 让我们来了解一下细节。

对Pandas value_counts方法的快速介绍

首先,让我们先解释一下value_counts技术的作用。

本质上,value_counts是对一个Pandas对象的_唯一值进行计数_。 我们经常使用这种技术在Python中进行数据处理和数据探索。

A simple image that explains how the Pandas value_counts method counts the values of a Python Series or Python dataframe.

value_counts 方法实际上会对几种不同类型的 Pandas 对象起作用。

  • 潘达系列
  • 潘达斯数据框架
  • 数据框架列(实际上是潘达系列对象)。

说到这里,你如何使用value_counts方法,将根据你所操作的对象的类型而略有不同。

此外,还有一些可选的参数,你可以使用它们来改变value_counts的作用。

既然如此,我们来看看语法。

value_counts 的语法

好的。 让我们来看看潘达斯value_counts技术的语法。

在这里,我将把它分成不同的部分,所以我们可以看看如何在系列对象上使用value_counts的语法,以及如何在数据帧上使用value count。

简要说明

下面的语法解释假设你已经导入了Pandas,并且你已经创建了一个Pandas数据框或Pandas系列。

你可以用这个代码导入Pandas。

import pandas as pd

关于数据框架的更多信息,你可以阅读我们对Pandas数据框架的介绍

在潘达斯数据框架上使用value_counts的语法

首先,让我们看一下如何在数据框架上使用value_counts的语法。

这真的很简单。 你只需输入数据框架的名称,然后.value_counts()

An image that explains the syntax for how to use value_counts on a dataframe.

当你在一个数据框架上使用value_counts时,它将计算_每一列_的唯一值组合的记录数。

这可能是比你想要的更多的信息,最好是将数据框架细分到只有几列。 我将在例子部分向你展示一些这方面的例子。

此外,还有一些你可以使用的可选参数,它们将修改方法的行为。 我将在参数部分向你展示这些参数。

在潘达斯系列中使用value_counts的语法

接下来,让我们看一下在系列对象上使用value_counts的语法。

系列的语法与数据框架的语法几乎相同。

An image that show how to use value_counts on a Pandas series.

你只需输入系列对象的名称,然后.value_counts()

此外,还有一些你可以使用的可选参数,我们将在参数部分讨论

在数据框架列上使用value_counts的语法

最后,让我们看看如何在数据框架内的_列上_使用value_counts。

记住:单个数据框架_列是_Series对象。

所以要在一个列上调用value_counts,我们首先使用 "点语法 "来检索一个单独的列。 例如,如果你的数据框架被命名为your_dataframe ,而你想检索的列被称为column ,你将开始键入your_dataframe.column

An image that shows how to use value_counts on a column in a Pandas dataframe.

之后,你只需输入.value_counts() ,该方法将检索出该列的唯一值的数量。

再一次,有一些额外的参数,你可以用来改变value_counts的工作方式。

让我们看一下这些参数。

数值统计的参数

Pandas的value_counts技术有几个参数,你可以使用这些参数来改变该技术的工作方式和具体的工作内容。

  • ascending
  • sort
  • normalize
  • subset
  • dropna

此外,还有bins 这个参数,我很少使用,这里就不讨论了。

值得注意的是,所有这些参数都是_可选的。_

还需要注意的是,这些参数中的大多数--ascending,sort, 和normalize --都是用于系列语法和数据框架语法的。

另一方面,subset ,只有当你在数据框架上使用value_counts时才可用,而dropna ,只有当你在系列上使用value_counts时才可用。

说了这么多,让我们来单独看看这些参数中的每一个。

ascending

默认情况下,value_counts将按数字计数_降序_对数据进行排序。

升序参数使你可以改变这一点。

当你设置ascending = True ,value counts将按照从低到高的计数对数据进行排序(即升序)。

我将在例4中向你展示这个例子

sort

排序参数控制输出的排序方式。

默认情况下,value_counts按_数字计数_对数据进行排序。

你可以通过设置sort = False 来改变这一点,并按类别对数据进行排序。

我将在例5中向你展示这个例子

normalize

normalize 参数改变了输出的形式。

默认情况下,value_counts显示的是唯一值的数量。

但是如果你设置了normalize = True ,value_counts将显示_总记录的比例_而不是原始计数。

我将在例6中向你展示这个例子

subset

当你在数据框架上使用value_counts时,subset 参数使你能够指定一个应用value_counts的列的子集。

这个参数的参数应该是一个列名的列表(或类似列表的对象)。

因此,例如,如果你想在数据框架中对var_1var_2 使用数值统计,你可以使用代码your_dataframe.value_counts(subset = ['val_1','var_2'])

注意:同样,这个参数在你对整个数据框架使用value_counts时起作用。

我将在例子7中向你展示这个例子

dropna

dropna 参数使你能够显示'NA'值(即NaN 值)。

你可以通过设置dropna = False 来做到这一点。

注意:这个参数只适用于Pandas系列对象和单个数据框架列。 如果你在整个数据框架上使用value_counts,这个参数将不起作用。

我将在例子2中向你展示这个例子。

例子。获取潘达斯数据框架和系列对象的值计数

现在我们已经看过了语法,让我们来看看一些如何使用value_counts技术的例子。

例子。

先运行此代码

在你运行这些例子之前,你需要运行一些初步代码,以便。

  • 导入必要的包
  • 获取一个数据框架
  • 创建一个我们可以操作的数据框架子集

让我们一次完成这些。

导入包

首先,让我们导入两个我们需要的包。

具体来说,我们需要导入Pandas和Seaborn。

你可以用下面的代码来做。

import pandas as pd
import seaborn as sns

很明显,我们需要Pandas来使用value_counts() 技术。 但我们也需要Seaborn,因为我们将使用titanic dataframe,我们可以从Seaborn的预装数据集中加载。

获取数据框架

接下来,让我们来获取我们要使用的数据框架。

在下面的例子中,我们将使用titanic 数据集,或者它的一些子集。

所以在这里,让我们从Seaborn加载数据集。

# GET DATASET
titanic = sns.load_dataset('titanic')

此外,让我们把它打印出来,这样我们就可以看到它的内容。

print(titanic)

输出。

     survived  pclass     sex   age  sibsp  parch     fare embarked   class       who  adult_male deck  embark_town alive  alone  
0           0       3    male  22.0      1      0   7.2500        S   Third      man        True  NaN  Southampton    no  False    
1           1       1  female  38.0      1      0  71.2833        C   First    woman       False    C    Cherbourg   yes  False     
2           1       3  female  26.0      0      0   7.9250        S   Third    woman       False  NaN  Southampton   yes   True  
3           1       1  female  35.0      1      0  53.1000        S   First    woman       False    C  Southampton   yes  False  
4           0       3    male  35.0      0      0   8.0500        S   Third      man        True  NaN  Southampton    no   True  
..        ...     ...     ...   ...    ...    ...      ...      ...     ...      ...         ...  ...          ...   ...    ...  
886         0       2    male  27.0      0      0  13.0000        S  Second      man        True  NaN  Southampton    no   True     
887         1       1  female  19.0      0      0  30.0000        S   First    woman       False    B  Southampton   yes   True  
888         0       3  female   NaN      1      2  23.4500        S   Third    woman       False  NaN  Southampton    no  False  
889         1       1    male  26.0      0      0  30.0000        C   First      man        True    C    Cherbourg   yes   True  
890         0       3    male  32.0      0      0   7.7500        Q   Third      man        True  NaN   Queenstown    no   True   

[891 rows x 15 columns]

这个数据框架中有15列,如果我们使用value_counts()技术,这将是一个有点困难的工作。

也就是说,让我们快速创建一个子集,我们可以在一些例子中使用。

创建数据框架子集

现在,让我们创建一个titanic 数据框架的子集。

这里,我们将创建一个包含两个变量的子集:sexembarked

为了对这两个变量进行子集,我们将使用Pandas的过滤方法。

#CREATE SUBSET
titanic_subset = titanic.filter(['sex','embarked'])

对于我们的一些例子来说,这个子集会更容易操作,因为它只有两个变量。

例子1:在数据框架列上使用value_counts

首先,让我们在一个单列上使用value_counts技术。

在这里,我们将在titanic 数据框架中的embarked 变量上使用value_counts。

让我们运行代码,然后我将解释。

titanic.embarked.value_counts()

输出。

S    644
C    168
Q     77
Name: embarked, dtype: int64

解释

执行这个操作的代码是一行代码,但从某种意义上说,它是一个两步的过程。

在这段代码中,我们正在。

  • 用 "点语法 "检索embarked 变量
  • 调用value_counts() 方法

因此,我们正在用代码titanic.embarked 检索embarked 变量。

但在这之后,我们用.value_counts() 来调用值计数方法。

在输出中,你可以看到embarked 变量的唯一值 -S,C, 和Q - 以及与每个值相关的计数。

实例2:在计数中包括 "NA "值(仅系列)。

接下来,让我们在输出中包括'NA'值(即NaN )。 这将使我们能够看到该变量的 "缺失 "值的数量,如果有的话。

请记住,在这里,我们仍然要对一个单一的数据框架变量进行操作。

titanic.embarked.value_counts(dropna = False)

输出。

S      644
C      168
Q       77
NaN      2
Name: embarked, dtype: int64

解释

在这里,我们调用了value_counts() ,就像我们在例子1中做的那样

唯一的区别是,我们在括号内加入了代码dropna = False

正如你在输出中看到的,现在有一个NaN (即 "缺失 "值)的数量。

如果你需要识别缺失的值来清理它们,这可能会很有用,等等。

注意:只有当你在Pandas系列或数据框架列上使用value_counts()时,这才能发挥作用。 如果你试图在整个潘达斯数据框架上使用value_counts(),它将_不会_起作用(如例子3)。

例子3:在整个Pandas数据框架上使用value_counts

在上两个例子中,我们在一个数据框架的_单列_上使用value_counts(即一个Pandas系列对象)。

现在,让我们在整个数据框架上使用value_counts。

在这里,我们将在titanic_subset 数据框上使用数值计数。 (记住,我们之前创建了这个子集。 它只有两个变量,以使它更容易操作)。)

好的。 让我们运行代码。

titanic_subset.value_counts()

输出。

sex     embarked
male    S           441
female  S           203
male    C            95
female  C            73
male    Q            41
female  Q            36
dtype: int64

解释

这真的很简单。

要做到这一点,我们只需输入数据框架的名称,然后.value_counts()

你可以看到,输出是对数据框架中变量的唯一组合的计数。

请注意,输出是按降序排序的。 这是默认的,但我们也可以改变它,我们将在下一个例子中这样做。

实例4:将输出按升序排序

在这个例子中,我们将以升序对输出进行排序。

请记住,默认情况下,value_counts是按_降序_排序的。

但我们可以通过ascending 参数改变这一行为。

让我们看一下。

titanic_subset.value_counts(ascending = True)

OUT:

sex     embarked
female  Q            36
male    Q            41
female  C            73
male    C            95
female  S           203
male    S           441
dtype: int64

解释

在这里,我们看到了数据框中唯一的数值组合的计数。

但是现在,因为我们设置了ascending = True ,所以输出是按升序排序的......是从低到高排序的。

例子5:按类别排序(而不是计数

现在,让我们完全删除排序。

要做到这一点,我们将用sort = False 来调用这个方法。

titanic_subset.value_counts(sort = False)

OUT。

sex     embarked
female  C            73
        Q            36
        S           203
male    C            95
        Q            41
        S           441
dtype: int64

解释

注意在输出中,数据不是按数值计数(即数字)排序的。

相反,数据是按类别排序的。 两个变量中唯一的分类值是按字母顺序排序的。

我个人认为这更容易阅读,但这确实取决于你在做什么。

可能在某些应用中这样做更好,也可能在某些情况下按数字计数排序会更好(比如默认行为)。

在任何情况下,你都有一个选择。

例子6:计算比例(即,对数值计数进行标准化处理

在这个例子中,我们来计算每个独特的数值组合的比例。

在前面的例子中,value_counts 提供了一个数值的计数。

在这里,我们将告诉value_counts 计算总记录的百分比,使用normalize 参数。

titanic_subset.value_counts(normalize = True)

OUT。

sex     embarked
male    S           0.496063
female  S           0.228346
male    C           0.106862
female  C           0.082115
male    Q           0.046119
female  Q           0.040495
dtype: float64

解释

这里的输出与例3的输出有些类似,即按频率降序排序。

但是它不是显示每个独特的类别组合的原始计数,而是显示比例。 注意,如果你把所有的数字加起来,它们加起来就是1。

因此,这些数字再次代表了每个独特组合在总记录中所占的比例。

例子7:对数据框架列的子集进行操作(仅数据框架

在前面的例子中,我已经向你展示了如何在pandas Series、小型Pandas数据框架(只有2列)或单个数据框架列上使用value_counts。

这里,我将向你展示如何操作一个有许多列的大型数据框架。

但是我们将使用subset 参数来减少输出的大小和复杂性。

所以在这里,我们将操作完整的titanic 数据框架,它有15列。 我们将使用subset 参数,只对其中的两个变量进行操作:sexembarked

让我们看一下。

titanic.value_counts(subset = ['sex','embarked'])

OUT。

sex     embarked
male    S           441
female  S           203
male    C            95
female  C            73
male    Q            41
female  Q            36
dtype: int64

解释

在这里,我们正在处理完整的titanic 数据集。 记住:这是有15个变量的完整数据集(而不是较小的titanic_subset 数据框,它只有2个变量)。

因此,在这里,我们正在使用带有15个变量的完整的titanic 数据框架,并且只对2个变量使用value_counts。 要做到这一点,我们要设置subset = ['sex','embarked']

请注意,在语法上,我们想要包含的每个变量都是以字符串的形式出现的(在引号内)。 而变量名的集合被组织成一个Python列表。

关于 value_counts 的常见问题

现在你已经了解了 value_counts 并看到了一些例子,让我们回顾一下一些常见问题。

经常问的问题。

问题1:当你对数据框架进行操作时,可以使用dropna参数吗?

很遗憾,不能。

dropna参数对于识别缺失值非常有用,但不幸的是,你只能在对单一数据框架列或Pandas系列进行操作时使用这个参数。

在下面的评论中留下你的其他问题

你对Pandas的value_counts技术还有其他问题吗?

是否有一些我在这里没有涉及到的问题让你纠结?

如果是,请在下面的评论区留下你的问题。

想了解更多关于Pandas的信息,请注册我们的邮件列表

这个教程应该已经帮助你理解了value_counts技术,以及它是如何工作的。

但如果你想掌握用Pandas进行数据清洗和数据处理的方法,还有很多东西需要学习。

如果你想更广泛地学习Python中的数据科学,甚至还有更多的东西需要学习。

也就是说,如果你已经准备好学习更多关于Pandas和Python中的数据科学,那么请注册我们的电子邮件列表。

当你注册时,你会得到以下方面的免费教程。

  • NumPy
  • Pandas
  • 基础Python
  • Scikit learn
  • 机器学习
  • 深度学习
  • ...以及更多。

我们每周都会发布免费的数据科学教程。 当你注册我们的电子邮件列表时,我们将把这些免费教程直接送到你的收件箱。

.et_bloom .et_bloom_optin_7 .et_bloom_form_content { 背景色。#999999 !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_container .et_bloom_form_header { 背景色。#2a2b2d !important; } .et_bloom .et_bloom_optin_7 .carrot_edge .et_bloom_form_content:before { border-top-color:#2a2b2d !important; } .et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_right .et_bloom_form_content:before, .et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_left .et_bloom_form_content:before { border-top-color : transparent !important; border-left-color:#2a2b2d !important; } @media only screen and ( max-width: 767px ) {.et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_right .et_bloom_content:before { border-top-color:#2a2b2d !important; border-left-color: transparent !important; }.et_bloom .et_bloom_optin_7 .carrot_edge.et_bloom_form_left .et_bloom_form_content:after { border-bottom-color :#2a2b2d !important; border-left-color: transparent !important; }.et_bloom .et_bloom_optin_7 .et_bloom_form_content button { 背景色。#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_content .et_bloom_fields i { color:#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_content .et_bloom_custom_field_radio i: before { background:#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_content button { background-color:#4598ab !important; } .et_bloom .et_bloom_optin_7 .et_bloom_form_container h2, .et_bloom .et_bloom_optin_7 .et_bloom_form_container h2 span, .et_bloom .et_bloom_optin_7 .et_bloom_form_container h2 strong { 字体-family:"Open Sans", Helvetica, Arial, Lucida, sans-serif; }.et_bloom .et_bloom_optin_7 .et_bloom_form_container p, .et_bloom .et_bloom_optin_7 .et_bloom_form_container p span, .et_bloom .et_bloom_optin_7 .et_bloom_form_container p strong, .et_bloom .et_bloom_optin_7 .et_bloom_form_container form input, .et_bloom .et_bloom_optin_7 .et_bloom_form_container form button span{字体:"Open Sans", Helvetica, Arial, Lucida, sans-serif; }

注册获取免费的数据科学教程

如果你想快速掌握数据科学,请注册我们的电子邮件列表。

当你注册时,你将会收到每周免费的关于如何用R和Python进行数据科学的教程。

给我免费的教程!

检查您的电子邮件收件箱,确认您的订阅 ...