Pandas 索引

在 Pandas 中,索引是指标识 DataFrame 或 Series 中的行或列的带标签的数组。例如,

    Name    Age      City
0   John     25  New York
1  Alice     28    London
2    Bob     32     Paris

在上面的 DataFrame 中,数字 012 代表索引,为每行提供唯一的标签。

我们可以使用索引来唯一标识数据,并高效精确地访问数据。


在 Pandas 中创建索引

Pandas 提供了几种创建索引的方法。一些常用方法如下:

  • 默认索引
  • 设置索引
  • 创建范围索引

默认索引

当我们创建 DataFrame 或 Series 而不显式指定索引时,Pandas 会分配一个从 0 开始的默认整数索引。例如,

import pandas as pd

data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}

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

输出

    Name  Age      City
0   John   25  New York
1  Alice   28    London
2    Bob   32     Paris

在此示例中,默认索引 [0, 1, 2] 会自动分配给行。


设置索引

我们可以使用 set_index() 方法将现有列设置为索引。例如,

import pandas as pd

# create dataframe
data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}

df = pd.DataFrame(data)

# set the 'Name' column as index df.set_index('Name', inplace=True)
print(df)

输出

Name     Age    City      
John     25  New York
Alice    28    London
Bob      32     Paris

在此示例中,Name 列被设置为索引,取代了默认的整数索引。

这里,inplace=True 参数直接在对象本身上执行操作,而无需创建新对象。当我们指定 inplace=True 时,原始对象会被修改,更改会直接应用。


创建范围索引

我们可以使用 RangeIndex() 函数创建具有特定开始和结束值的范围索引。例如,

import pandas as pd

# create dataframe
data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}

df = pd.DataFrame(data)

# create a range index df = pd.DataFrame(data, index=pd.RangeIndex(5, 8, name='Index'))
print(df)

输出

         Name  Age      City
Index                       
5        John   25  New York
6       Alice   28    London
7         Bob   32     Paris

这里,创建了一个从 58(不含)的范围索引,名称为 Index


修改 Pandas 中的索引

Pandas 允许我们轻松地对索引进行更改。一些常见的修改操作是:

  • 重命名索引
  • 重置索引

重命名索引

我们可以使用 rename() 方法重命名索引。例如,

import pandas as pd

# create a dataframe
data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}
df = pd.DataFrame(data)

# display original dataframe
print('Original DataFrame:')
print(df)
print()

# rename index df.rename(index={0: 'A', 1: 'B', 2: 'C'}, inplace=True)
# display dataframe after index is renamed print('Modified DataFrame') print(df)

输出

Original DataFrame:
    Name  Age      City
0   John   25  New York
1  Alice   28    London
2    Bob   32     Paris

Modified DataFrame
    Name  Age      City
A   John   25  New York
B  Alice   28    London
C    Bob   32     Paris

在此示例中,我们将索引 012 分别重命名为 'A''B''C'


重置索引

我们可以使用 reset_index() 方法将索引重置为默认整数索引。例如,

import pandas as pd

data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}

# create a dataframe
df = pd.DataFrame(data)

# rename index
df.rename(index={0: 'A', 1: 'B', 2: 'C'}, inplace=True)

# display dataframe
print('Original DataFrame:')
print(df)
print('\n')

# reset index df.reset_index(inplace=True)
# display dataframe after index is reset print('Modified DataFrame:') print(df)

输出

Original DataFrame:
    Name  Age      City
A   John   25  New York
B  Alice   28    London
C    Bob   32     Paris

Modified DataFrame:
  index   Name  Age      City
0     A   John   25  New York
1     B  Alice   28    London
2     C    Bob   32     Paris

通过索引访问行

我们可以使用 .iloc 属性访问 DataFrame 的行。例如,

import pandas as pd

# create a dataframe
data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}

df = pd.DataFrame(data)

second_row = df.iloc[1]
print(second_row)

输出

Name     Alice
Age         28
City    London
Name: 1, dtype: object

在此示例中,我们使用 .iloc 属性通过其索引值(1)显示了 df DataFrame 的第二行。

要了解更多信息,请访问 Pandas 索引和切片 文章。


获取 DataFrame 索引

我们可以使用 index 属性访问 DataFrame 索引。例如,

import pandas as pd

# create a dataframe
data = {'Name': ['John', 'Alice', 'Bob'],
        'Age': [25, 28, 32],
        'City': ['New York', 'London', 'Paris']}

df = pd.DataFrame(data)

# return index object print(df.index) # return index values print(df.index.values)

输出

RangeIndex(start=0, stop=3, step=1)
[0 1 2]

这里,

  • df.index - 返回索引对象
  • df.index.values - 以列表形式返回索引值

索引类型

Pandas 支持不同类型的索引,它们根据数据需求提供各种功能。下表列出了一些值得注意的类型。

类型 描述 示例
范围索引 (RangeIndex) 它表示指定范围内的整数序列。它的类型是 int64。范围索引 [0, 1, 2, ...] 通常在创建 DataFrame 时用作默认索引。 [0, 1, 2, 3, 4, 5, 6]

[100, 101, 102, 103, 104]
分类索引 (CategoricalIndex) 它用于处理分类数据。它存储一组固定的唯一分类值。 ['Red', 'Green', 'Blue', 'Red', 'Blue']

['Category A', 'Category B', 'Category C', 'Category A', 'Category B']
日期时间索引 (DatetimeIndex) 它用于处理时间序列数据。它的类型是 datetime64 ['2023-06-01', '2023-06-02', '2023-06-03', '2023-06-04', '2023-06-05']

['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05']

除此以外,还有其他类型的索引:

多级索引
(MultiIndex)
它允许我们在 DataFrame 或 Series 对象的的一个或多个轴上拥有多个索引级别。
区间索引
(IntervalIndex)
它用于在 pandas 中表示值的区间或范围。
时间差索引
(TimedeltaIndex)
它表示一系列时间持续。索引中的每个元素代表一个特定的时间持续,例如小时、分钟、秒或它们的组合。
周期索引
(PeriodIndex)
它表示一系列时间周期。索引中的每个元素代表一个特定的时间周期,例如一天、一个月、一个季度或一年。

要了解更多信息,请参阅关于 Pandas 索引 的官方文档。


我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战