在 Pandas 中,索引是指标识 DataFrame 或 Series 中的行或列的带标签的数组。例如,
Name Age City 0 John 25 New York 1 Alice 28 London 2 Bob 32 Paris
在上面的 DataFrame 中,数字 0、1 和 2 代表索引,为每行提供唯一的标签。
我们可以使用索引来唯一标识数据,并高效精确地访问数据。
在 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
这里,创建了一个从 5 到 8(不含)的范围索引,名称为 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
在此示例中,我们将索引 0、1 和 2 分别重命名为 '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 索引 的官方文档。