
Pandas 操作数据集(最全总结之一)
第1部分:选择带[ ],.loc和.iloc
这是关于如何从pandas DataFrame或Series中选择数据子集的四部分系列的开始。Pandas为子集选择提供了多种选择,这需要多篇文章。本系列分为以下四个主题。
- 选择带[],.loc和.iloc
- 布尔索引
- 分配数据子集
- 如何不选择数据子集
开始之前的假设
这些系列文章假定您不了解Pandas,但是您了解Python编程语言的基础。它还假定您已在计算机上安装了Pandas。
将Pandas与Python和其他主要科学计算库结合使用的最简单方法是安装Miniconda发行版(请参阅完整的教程的链接)。
进行子集选择的重要性
您可能想知道,为什么有那么多关于选择数据子集的文章。这个主题对pandas来说非常重要,很遗憾它很复杂,因为在实际分析中子集选择经常发生。由于您经常选择子集,因此需要掌握它才能使pandas变得更轻松。
参考文档
有关索引和选择数据的官方pandas文档也涵盖了本文中的材料。我强烈建议您与本教程一起阅读文档的该部分。实际上,文档是掌握pandas的主要手段之一。我写了一篇循序渐进的文章“ 如何学习pandas”,其中提供了有关如何在掌握pandas的同时使用文档的建议。
DataFrame和Series的剖析
pandas库具有两个主要的数据容器:DataFrame和Series。使用Pandas时,几乎所有的时间都花在处理这两个对象上。DataFrame的使用比Series更多,因此让我们首先看一下它的图像。

此图像带有一些附加的插图,以突出显示其组件。乍一看,DataFrame看起来就像您看到的任何其他二维数据表一样。它有行,有列。从技术上讲,DataFrame具有三个主要组件。
DataFrame的三个组成部分
DataFrame由三个不同的组件组成:索引,列和数据。数据也称为值。
索引表示DataFrame最左侧的值序列。索引中的所有值都在粗字体。索引的每个单独的值称为标签。有时,该索引称为行标签。在上面的示例中,行标签不是很有趣,只是从0到n-1的整数,其中n是表中的行数。pandas默认使用此简单索引作为DataFrames。
这些列是DataFrame顶部的值序列。它们也以粗体显示。列的每个单独的值都称为列,但也可以称为列名或列标签。
其他所有非粗体字都是数据或值。有时您会听到被称为表格数据的DataFrames 。这只是具有行和列的矩形表数据的另一个名称。将行或列称为轴也是常见的术语。统称为“ 轴”。因此,一行是一个轴,一列是另一个轴。
每行都有一个标签,每列都有一个标签
从DataFrame解剖结构中得出的主要结论是,每行都有一个标签,每列都有一个标签。这些标签用于引用DataFrame中的特定行或列。这与人类如何使用名称来指代特定的人一样。
什么是子集选择?
在开始选择子集之前,最好定义一下子集。子集选择只是从DataFrame(或Series)中选择数据的特定行和列。这可能意味着选择所有行和一些列,选择一些行和所有列,或者选择每个行和列。
选择某些列和所有行的示例
让我们看一些子集选择的图像。我们将首先查看带有伪数据的示例DataFrame。

比方说,我们要选择的只是列color,age和height但保留所有行。
我们最终的DataFrame如下所示:

选择一些行和所有列的示例
我们还可以进行选择,仅选择一些行。我们选择带有标签的行Aaron,并Dean连同所有的列:

我们最终的DataFrame希望:

选择一些行和一些列的示例
让我们从上面结合选择和选择的列color,age以及height只带标签的行Aaron和Dean。

我们最终的DataFrame如下所示:

熊猫双重参考:按标签和按整数位置
我们已经提到过,每一行和每一列都有一个可用来引用它们的特定标签。这在DataFrame中以粗体显示。
但是,没有提到的是,每一行和每一列也可以由整数引用。我称这个整数位置。对于每一行和每一列,整数位置从0开始,以n-1结束。再次在上方查看我们的示例DataFrame。
带标签的行Aaron和Dean还可以通过它们各自的整数位置2和4类似地,列中引用color,age并且height可以通过它们的整数位置1,图3和4中被引用。
该文档将整数位置称为position。我不特别喜欢这种术语,因为它不像整数位置那样明确。这里的关键术语是整数。
索引和选择数据子集有什么区别?
该文档经常使用术语索引。这个术语本质上只是一个单字短语,用来表示“子集选择”。我更喜欢术语子集选择,因为它再次描述了实际发生的事情。索引也是官方Python文档中使用的术语。
只注重[],.loc以及.iloc
选择数据子集的方法有很多,但是在本文中,我们仅介绍方括号([])**.loc**和的用法**.iloc**。它们统称为索引器。到目前为止,这些是选择数据的最常用方法。本系列的不同部分将讨论一些可用于进行子集选择的方法。
如果您有一个DataFrame,则df您的子集选择将类似于以下内容:
df []
df.loc []
df.iloc []
实际的子集选择将在方括号内包含一些内容。本文中的所有选择都将在这些方括号内进行。
请注意,方括号也位于.loc和之后.iloc。Python中的所有索引都发生在这些方括号内。
使用以下命令将数据读入DataFrame read_csv
让我们开始使用熊猫读取DataFrame,然后从那里单独使用索引运算符选择数据子集。这些教程的所有数据都在数据目录中。
我们将使用该read_csv 函数将数据读入DataFrame。我们将路径传递到文件作为函数的第一个参数。我们还将使用该index_col`参数选择数据的第一列作为索引(稍后会对此进行更多介绍)。
>>> import pandas as pd
>>> import numpy as np>>> df = pd.read_csv('data/sample_data.csv', index_col=0)
>>> df

提取单个DataFrame组件
之前,我们提到了DataFrame的三个组件。索引,列和数据(值)。我们可以将每个组件提取到它们自己的变量中。让我们这样做,然后检查它们:
>>> index = df.index
>>> columns = df.columns
>>> values = df.values
>>> index
Index(['Jane', 'Niko', 'Aaron', 'Penelope', 'Dean', 'Christina',
'Cornelia'], dtype='object')
>>> columns
Index(['state', 'color', 'food', 'age', 'height', 'score