Python Pandas – 根据索引从列中选择特定值创建子集
Python Pandas 是一个数据分析工具包,提供了各种用于数据操作和分析的工具。Pandas 中的一维标记数组 Series 和二维表格数据结构 DataFrame 是最常用的数据类型之一。在 Pandas 中,我们可以使用索引(Index)来选择和过滤数据,同时也可以根据索引从列中筛选出特定值来创建子集。
什么是 Pandas 索引?
在 Pandas 中,索引是一个“标签”或“标识符”,它用于标识每个数据行(或列)的唯一位置。与传统的 Python 列表或 Numpy 数组不同,Pandas 数据结构使用自定义的索引,这样就可以更方便地处理各种类型的数据。
例如,在下面的示例中,我们将创建一个包含交易数据的 DataFrame,其中每一行代表一笔交易,其中包含时间戳、购买者姓名、购买数量和单价等信息。我们为 DataFrame 自定义了时间戳索引,使得每一笔交易都可以使用其时间戳进行唯一标识。
import pandas as pd
import numpy as np
# 创建 DataFrame,包含时间戳、购买者姓名、购买数量和单价等信息
df = pd.DataFrame({
'timestamp': pd.date_range('2021-01-01', periods=6, freq='H'),
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
'quantity': np.random.randint(10, 20, size=6),
'price': np.random.randint(50, 100, size=6),
})
# 将时间戳设置为索引
df.set_index('timestamp', inplace=True)
print(df)
输出结果如下:
name quantity price
timestamp
2021-01-01 00:00:00 Alice 15 69
2021-01-01 01:00:00 Bob 19 70
2021-01-01 02:00:00 Charlie 19 53
2021-01-01 03:00:00 David 19 64
2021-01-01 04:00:00 Eva 11 80
2021-01-01 05:00:00 Frank 16 89
我们可以看到,每个日期时间戳都成为了 DataFrame 的索引,可以通过索引来选择和过滤数据。
如何使用 Pandas 索引从列中选择特定值?
从 Pandas DataFrame 中选择特定的列和行通常是简单的,但有时我们想要根据索引从列中选择特定值并创建子集。在 Pandas 中,可以使用 loc 或 iloc 属性来实现这一目标。
loc 属性
loc 属性是基于标签(Label)进行索引的,它可以使用标签名称来选择特定的行和列。具体用法如下:
# 选择以 '2021-01-01 01:00:00' 为索引的行,并从中选择 'name' 和 'quantity' 两列
subset = df.loc['2021-01-01 01:00:00', ['name', 'quantity']]
print(subset)
输出结果如下:
name Bob
quantity 19
Name: 2021-01-01 01:00:00, dtype: object
在上面的示例中,我们使用 loc 属性选择了以 ‘2021-01-01 01:00:00’ 为索引的行,并从中选择了 ‘name’ 和 ‘quantity’ 两列。注意,loc 属性返回的是 Series 类型的数据,而不是 DataFrame。
我们也可以选择一个范围内的行和列,例如:
# 选择从 '2021-01-01 02:00:00' 到 '2021-01-01 04:00:00' 之间的所有行,并选择 'quantity' 和 'price' 两列
subset = df.loc['2021-01-01 02:00:00':'2021-01-01 04:00:00', ['quantity', 'price']]
print(subset)
输出结果如下:
quantity price
timestamp
2021-01-01 02:00:00 19 53
2021-01-01 03:00:00 19 64
2021-01-01 04:00:00 11 80
iloc 属性
iloc 属性是基于整数位置(Integer Position)进行索引的,它可以使用行号和列号来选择特定的元素。具体用法如下:
# 选择第 2 行和第 4 行,并选择第 2 和第 3 列
subset = df.iloc[[1,3], [1,2]]
print(subset)
输出结果如下:
quantity price
timestamp
2021-01-01 01:00:00 19 70
2021-01-01 03:00:00 19 64
在上面的示例中,我们使用 iloc 属性选择了第 2 行和第 4 行,并选择了第 2 和第 3 列。注意,iloc 返回的是 DataFrame 类型的数据。
结论
在本文中,我们介绍了 Pandas 中的索引和如何使用 loc 和 iloc 属性根据索引从列中选择特定值创建子集。使用 Pandas,我们可以轻松地操作和分析复杂的数据集,从而提高我们的数据处理效率。