Pandas设置索引。如何设置数据帧索引

729 阅读9分钟

Python Pandas set_index and reset_index method Tutorial With Example For Beginners Crash Course

Pandas set_index()是一个库方法,用于设置列表、Series或数据帧的索引的数据帧。它将key、drop、append、inplaceverify_integrity 作为参数,并使用一个或多个现有列返回带有索引的数据框架。

要使用Pandas中现有的列或数组设置 DataFrame 的索引,请使用set_index() 方法。 **set_index()**函数使用现有的列来设置DataFrame的索引。该索引可以替换现有的索引,也可以在此基础上扩展。

Pandas DataFrame 只不过是通过Python对excel表格的内存表示。一个索引对象是一个不可变的数组。索引允许我们使用标签来访问某一行或某一列。

Pandas DataFrame是一个包含二维数据和其相关标签的组合。DataFrame 是一个二维的标签数据结构,列的类型可能不同。DataFrame被用于数据科学机器学习、科学计算和许多其他数据密集型领域。

让我们来看看set_index()函数的语法。

语法

DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

使用一个或多个现有列设置DataFrame索引(行标签)。默认情况下,它将产生新的对象。

参数

  1. keys。 列名或列名的列表。
  2. drop。这是一个 布尔值,如果为True,则下降用于索引的列。
  3. append。 如果为真,它将该列追加到现有的索引列中。
  4. inplace:它是一个布尔值。 如果为真,它将在DataFrame中进行更改。
  5. verify_integrity:如 果是的话,它检查新的索引列是否有重复的地方。

例子

我们将使用在以下Google Docs链接中发现的真实数据。

docs.google.com/spreadsheet…

Pandas DataFrames是包含的数据结构。

  1. 数据被组织成两个维度,即行和列。
  2. 行和列相吻合的标签

现在,打开Jupyter笔记本,首先导入Pandas库。

在Jupyter笔记本的第一个单元格中写下以下代码。

import pandas as pd

Ctrl+Enter键,运行该单元**。**

好的,现在我们将使用Pandas中DataFrame数据结构的**read_csv()** 函数。所以在下一个单元格中写下以下代码。

data = pd.read_csv('data.csv', skiprows=4)
data

我们使用**read_csv()** 函数,跳过前四行,并显示剩余的行。运行该单元格,看看输出。如果有这么多行,它将显示前30行和最后30行。

在我们的数据文件中,有超过29,000行。这就是为什么我们可以看到前30行和最后30行。

Pandas Set Index Example | Python DataFrame.set_index() Tutorial

如果你得到上述输出,你已经成功导入了数据。

第一行是列标签(城市、版本、运动项目、学科、运动员、NOC、性别、事件、事件_性别和奖牌)。第一列是行标签(0、1、2,以此类推)。所有其他单元格都填入了数据值。

有几种方法可以创建Pandas DataFrame。在大多数情况下,你将使用DataFrame构造函数并填写数据、标签和其他信息。有时,你会从CSV或Excel文件中导入数据。然后,你可以把数据作为二维列表元组NumPy数组传递。你也可以给它以字典Pandas系列实例或本例中未涉及的许多其他数据类型之一。

现在,让我们看看索引对象的类型。

好的,在下一个单元格中,输入下面的代码,看看索引对象的类型。

type(data.index)

请看下面的输出。

Python DataFrame.set_index() Tutorial

这里你可以看到,索引有它的类型。

记住 ,索引数据是不可改变的,我们在任何情况下都不能改变它。

Pandas DataFrame set_index() 示例

我们将使用set_index()方法为Python DataFrame设置一个索引**。**

有两种方法来设置DataFrame的索引。

  1. 使用参数inplace=True 来设置当前DataFrame的索引。
  2. 将新创建的DataFrame索引分配给一个变量,并进一步使用它来使用索引的结果。

让我们看看第一种方式。但是,首先,让我们选择运动员 作为索引,并将该列设置为索引。

在下一个单元格中写下以下代码,看看输出结果。

data.set_index('Athlete',inplace=True)

运行单元格,在下一个单元格中使用下面的代码显示DataFrame。

data

我们可以看到,在输出中,DataFrame的索引是基于运动员名字的。

Pandas DataFrame set_index() Example

在这里,在代码中,我们把inplace=True 作为一个参数,这意味着把运动员 的索引分配给了当前的DataFrame。

Pandas数据框架有时会非常大,使得查看所有的行变得很荒谬。你可以用.head() 来显示前几个元素,用.tail() 来显示最后几个元素。

Pandas DataFrame的每一列都是Pandas Series的一个实例,一个包含一维数据及其标签的结构。因此,你可以通过使用标签作为键来获得Series对象的单个元素,就像使用字典一样。

属性**.ndim** 、.shape和 .size 分别返回维度数、每个维度的数据值数以及数据值的总数。

重置潘达斯数据框架中的索引

Pandas的reset_index() 方法重置了一个数据框架的索引。 reset_index()方法设置了一个从0到数据长度的整数列表作为索引。我们可以使用reset_index() 函数来重置索引。让我们看看下面的代码。

data.reset_index(inplace=True)
data

请看下面的输出。

Reset Index in Pandas DataFrame

现在,看看使用set_index()方法的第二种方式。

在下一个单元格中写下以下代码。

indexedData = data.set_index('Athlete')
indexedData

请看下面的输出。

Pandas Set Index Example | Python DataFrame.set_index() Tutorial For Beginners

在这里,我们可以看到,我们没有传递第二个 参数,同时,我们将数据保存到另一个变量中,并将这些数据显示在Jupyter笔记本中。

所以,在本教程中,我们已经看到了使用任何列作为索引的两种方法,并看到我们如何使用reset_index()方法来重置该索引**。**

Python设置索引的其他例子

Python是一种用于数据分析的特殊语言,主要是因为以数据为中心的Python软件包的伟大生态系统。

Python的Pandas 是这些包中的一个,它使导入和分析数据变得更加舒适。

Pandas**set_index()**是设置ListSeries或Data frame作为DataFrame索引的方法。

索引列也可以在制作数据框架时设置。但是有时候,数据框是由两个或更多的数据框组成的,因此以后可以用set_index()方法改变索引。

>>> 

设置索引成为'月'列。

>>> 

使用'年'和'月'列创建MultiIndex。

>>> 

使用一个索引和一个列创建MultiIndex。

>>> 

使用两个系列创建一个MultiIndex。

>>> 

Python数据框架set_index没有设置

你有一个数据框架,并将索引设置为 "Timestamp "列。

目前,该索引只是一个行号。例如,Timestamp的格式是2019-10-02 15:42:00。

你需要在set_index中写下以下代码。

df.set_index('Timestamp', inplace=True, drop=True)

你需要指定inplace=True或者将结果分配给变量。

将pandas DataFrame的索引转换成列

你可以访问Pandas DataFrame中的一个列,就像你从字典中获取一个值一样。

让我们弄清楚如何将数据框的索引转换为列。

从我们的例子来看,让我们把索引设置为列sales。

为此,我们需要写下面的代码片段。

df['sales'] = df.index

或者,我们可以reset_index()

df.reset_index(level=0, inplace=True)

Pandas为多列设置索引。

在这个例子中,两列将被作为索引列。

drop参数用于Drop列,append参数用于将传递的列追加到已经存在的索引列中。

df.set_index(["Month", "Year"], inplace = True, 
                            append = True, drop = False)

通过df.reset_index(level=df.index.names, inplace=True),人们可以将给定的整个多索引转换成列。

使用set_index()方法,你可以改变索引,正如已经解释过的使用set_index()方法。

你不需要手动交换行与列,潘达斯中的潘达斯转置()方法会帮你做到。

如何在Pandas DataFrame中分配多指标

你可以使用set_index()函数将多列分配为多指数。通过在第一个参数keys中指定一个列名列表,可以将多列设置为多指数。

比方说,我们有这样的数据:people.csv

好,让我们从CSV文件中创建一个DataFrame。

import pandas as pd

data = pd.read_csv('people.csv')

df = pd.DataFrame(data)
print(df.head(10))

输出

Name Sex  Age  Height  Weight
0  Alex   M   41      74     170
1  Bert   M   42      68     166
2  Carl   M   32      70     155
3  Dave   M   39      72     167
4  Elly   F   30      66     124
5  Fran   F   33      66     115
6  Gwen   F   26      64     121
7  Hank   M   30      71     158
8  Ivan   M   53      72     175
9  Jake   M   32      69     143

好的,现在让我们设置两列作为一个索引。请看下面的代码。

import pandas as pd

data = pd.read_csv('people.csv')

df = pd.DataFrame(data)
df10 = df.head(10)
df_mul_index = df10.set_index(['Sex', 'Age'])
print(df_mul_index)

输出

         Name  Height  Weight
Sex Age
M   41   Alex      74     170
    42   Bert      68     166
    32   Carl      70     155
    39   Dave      72     167
F   30   Elly      66     124
    33   Fran      66     115
    26   Gwen      64     121
M   30   Hank      71     158
    53   Ivan      72     175
    32   Jake      69     143

从输出结果中,你可以看到,我们已经分配了一个多索引。

用sort_index()函数进行排序,使其显示得很整齐。

import pandas as pd

data = pd.read_csv('people.csv')

df = pd.DataFrame(data)
df10 = df.head(10)
df_mul_index = df10.set_index(['Sex', 'Age'])
df_mul_index.sort_index(inplace=True)
print(df_mul_index)

输出结果

Name  Height  Weight
Sex Age
F   26   Gwen      64     121
    30   Elly      66     124
    33   Fran      66     115
M   30   Hank      71     158
    32   Carl      70     155
    32   Jake      69     143
    39   Dave      72     167
    41   Alex      74     170
    42   Bert      68     166
    53   Ivan      72     175

现在,它已经整齐干净了。

Pandas set index: 改变索引到另一列。

如果你用set_index()设置另一列,原来的索引将被删除。 如果你想保留原来的索引作为一列,请使用reset_index()将索引重新分配为从0开始的连续数字, 见代码。

import pandas as pd

data = pd.read_csv('people.csv')

df = pd.DataFrame(data)
df10 = df.head(10)
df_mul_index = df10.set_index(['Sex', 'Age'])
df_re_index = df_mul_index.reset_index()
print(df_re_index)

输出

Sex  Age  Name  Height  Weight
0   M   41  Alex      74     170
1   M   42  Bert      68     166
2   M   32  Carl      70     155
3   M   39  Dave      72     167
4   F   30  Elly      66     124
5   F   33  Fran      66     115
6   F   26  Gwen      64     121
7   M   30  Hank      71     158
8   M   53  Ivan      72     175
9   M   32  Jake      69     143

使用索引选择行和元素

你可以使用loc[]通过名称索引来选择行和元素。

import pandas as pd

data = pd.read_csv('people.csv')

df = pd.DataFrame(data)
df10 = df.head(10)
df_index = df10.set_index(['Name'])
daloc = df_index.loc['Gwen']
print(daloc)

输出

Sex         F
Age        26
Height     64
Weight    121
Name: Gwen, dtype: object

最后,Pandas集合索引实例结束了。

推荐文章

潘达斯的布尔式索引

Pandas sort_values

潘达的价值计数

Pandas iloc[]

Pandas过滤器

The postPandas set index:如何设置数据帧索引》首次出现在AppDividend上。