Python Pandas - 索引对象



在 Pandas 中,索引对象在以结构化的方式组织和访问数据方面发挥着重要作用。它们像带标签的数组一样工作,并在定义数据如何在SeriesDataFrames等结构中排列和访问方面发挥着重要作用。索引允许快速数据搜索、高效切片并保持数据正确对齐,同时为每一行提供有意义的标签。

索引用于标记 DataFrame 的行或 Series 中的元素。这些标签可以是数字、字符串或日期,它们帮助您识别数据。关于 Pandas 索引需要记住的一件重要的事情是,它们是不可变的,这意味着一旦创建,您就无法更改其大小。

在本教程中,我们将学习 Pandas 索引对象以及 Pandas 中各种类型的索引。

Index 类

Index 类是用于存储 Pandas 对象中所有索引类型的基本对象。它提供了访问和操作数据的基本功能。

索引对象的关键特征

  • 不可变:索引对象是不可变的序列,一旦创建就无法修改。

  • 对齐:索引确保来自不同 DataFrame 或 Series 的数据可以根据索引值正确组合。

  • 切片:索引允许根据标签快速切片和检索数据。

语法

以下是 Index 类的语法:

class pandas.Index(data=None, dtype=None, copy=False, name=None, tupleize_cols=True)

其中,

  • data:索引的数据,可以是类似数组的结构(如列表或 NumPy 数组)或其他索引对象。

  • dtype:它指定索引值的的数据类型,如果未提供,Pandas 将根据索引值确定数据类型。

  • copy:这是一个布尔参数(True 或 False),它指定是否创建输入数据的副本。

  • name:此参数为索引提供标签。

  • data:这也是一个布尔参数(True 或 False),当为 True 时,它会尝试在可能的情况下创建 MultiIndex。

Pandas 中的索引类型

Pandas 提供各种类型的索引来处理不同类型的数据。例如:

让我们讨论 Pandas 中所有类型的索引。

数值索引

数值索引是 Pandas 中的基本索引类型,它包含数值。数值索引是默认索引,如果您未提供任何索引,Pandas 会自动分配它。

示例

以下示例演示了 Pandas 如何自动为 Pandas DataFrame 对象分配数值索引

import pandas as pd

# Generate some data for DataFrame
data = {
   'Name': ['Steve', 'Lia', 'Vin', 'Katie'],
   'Age': [32, 28, 45, 38],
   'Gender': ['Male', 'Female', 'Male', 'Female'],
   'Rating': [3.45, 4.6, 3.9, 2.78]
}
# Creating the DataFrame
df = pd.DataFrame(data)

# Display the DataFrame
print(df)

print("\nDataFrame Index Object Type:",df.index.dtype)

以下是上述代码的输出:

Name Age Gender Rating
0 Steve 32 Male 3.45
1 Lia 28 Female 4.60
2 Vin 45 Male 3.90
3 Katie 38 Female 2.78
DataFrame Index Object Type: int64

分类索引

分类索引用于处理重复标签。此索引在内存使用和处理大量重复元素方面效率很高。

示例

以下示例使用分类索引创建一个 Pandas DataFrame。

import pandas as pd

# Creating a CategoricalIndex
categories = pd.CategoricalIndex(['a','b', 'a', 'c'])
df = pd.DataFrame({'Col1': [50, 70, 90, 60], 'Col2':[1, 3, 5, 8]}, index=categories)
print("Input DataFrame:\n",df)

print("\nDataFrame Index Object Type:",df.index.dtype)

以下是上述代码的输出:

Input DataFrame:
Col1 Col2
a 50 1
b 70 3
a 90 5
c 60 8
DataFrame Index Object Type: category

区间索引

区间索引用于表示数据中的区间(范围)。此类型的索引将使用interval_range()方法创建。

示例

以下示例使用interval_range()方法创建具有区间索引的 DataFrame。

import pandas as pd

# Creating a IntervalIndex
interval_idx = pd.interval_range(start=0, end=4)

# Creating a DataFrame with IntervalIndex
df = pd.DataFrame({'Col1': [1, 2, 3, 4], 'Col2':[1, 3, 5, 8]}, index=interval_idx)

print("Input DataFrame:\n",df)

print("\nDataFrame Index Object Type:",df.index.dtype)

以下是上述代码的输出:

Input DataFrame:
Col1 Col2
(0, 1] 1 1
(1, 2] 2 3
(2, 3] 3 5
(3, 4] 4 8
DataFrame Index Object Type: interval[int64, right]

多级索引

Pandas 多级索引用于表示 Pandas 数据结构索引中的多个级别或层,也称为分层索引。

示例

以下示例显示了创建简单的多级索引 DataFrame。

import pandas as pd

# Create MultiIndex
arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
multi_idx = pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))

# Create a DataFrame with MultiIndex
df = pd.DataFrame({'Col1': [1, 2, 3, 4], 'Col2':[1, 3, 5, 8]}, index=multi_idx)

print("MultiIndexed DataFrame:\n",df)

以下是上述代码的输出:

MultiIndexed DataFrame:
Col1 Col2
1 red 1 1
blue 2 3
2 red 3 5
blue 4 8

日期时间索引

Pandas 日期时间索引对象用于表示日期和时间值。换句话说,它用于时间序列数据,其中每一行都链接到一个特定的时间戳。

示例

以下示例使用日期时间索引创建一个 Pandas DataFrame。

import pandas as pd

# Create DatetimeIndex
datetime_idx = pd.DatetimeIndex(["2020-01-01 10:00:00", "2020-02-01 11:00:00"])

# Create a DataFrame with DatetimeIndex
df = pd.DataFrame({'Col1': [1, 2], 'Col2':[1, 3]}, index=datetime_idx )

print("DatetimeIndexed DataFrame:\n",df)

以下是上述代码的输出:

DatetimeIndexed DataFrame:
Col1 Col2
2020-01-01 10:00:00 1 1
2020-02-01 11:00:00 2 3

时间增量索引

Pandas 时间增量索引用于表示两个日期或时间之间的持续时间,例如事件之间的天数或小时数。

示例

此示例使用时间增量索引创建一个 Pandas DataFrame。

import pandas as pd

# Create TimedeltaIndex
timedelta_idx = pd.TimedeltaIndex(['0 days', '1 days', '2 days'])

# Create a DataFrame with TimedeltaIndex
df = pd.DataFrame({'Col1': [1, 2, 3], 'Col2':[1, 3, 3]}, index=timedelta_idx )

print("TimedeltaIndexed DataFrame:\n",df)

以下是上述代码的输出:

TimedeltaIndexed DataFrame:
Col1 Col2
0 days 1 1
1 days 2 3
2 days 3 3

周期索引

Pandas 周期索引用于表示时间中的规则周期,例如季度、月份或年份。

示例

此示例使用周期索引对象创建一个 Pandas DataFrame。

import pandas as pd

# Create PeriodIndex
period_idx = pd.PeriodIndex(year=[2020, 2024], quarter=[1, 3])

# Create a DataFrame with PeriodIndex
df = pd.DataFrame({'Col1': [1, 2], 'Col2':[1, 3]}, index=period_idx )

print("PeriodIndexed DataFrame:\n",df)

以下是上述代码的输出:

PeriodIndexed DataFrame:
Col1 Col2
2020Q1 1 1
2024Q3 2 3
广告