Pandas Series自定义索引和标签

1. Pandas Series自定义索引和标签

在 Pandas 中,Series 是一种类似于一维数组的数据结构,但它比普通的 NumPy 数组更灵活,因为它支持自定义索引(index)。你可以使用自定义标签作为索引,而不是默认的整数索引,这使得数据访问和操作更加直观和便捷。


1. 创建带有默认索引的 Pandas Series

默认情况下,Pandas Series 会使用整数作为索引(从 0 开始)。

import pandas as pd

# 创建 Series,未指定索引,默认使用 0,1,2,3,4
data = pd.Series([10, 20, 30, 40, 50])
print(data)

输出:

0    10
1    20
2    30
3    40
4    50
dtype: int64

2. 创建带有自定义索引的 Series

你可以在创建 Series 时指定索引,使其更具可读性。

data = pd.Series([10, 20, 30, 40, 50], index=['A', 'B', 'C', 'D', 'E'])
print(data)

输出:

A    10
B    20
C    30
D    40
E    50
dtype: int64

现在,我们可以通过索引标签访问数据,而不仅仅是整数索引。


3. 访问自定义索引的元素

(1)使用索引标签访问数据

print(data['A'])  # 输出 10
print(data['C'])  # 输出 30

(2)使用 .loc[] 访问数据

.loc[] 方法用于基于标签索引访问数据:

print(data.loc['B'])  # 输出 20

(3)使用 .iloc[] 按整数位置访问数据

即使你使用了自定义索引,你仍然可以使用 .iloc[] 按照整数位置进行访问:

print(data.iloc[2])  # 输出 30,因为 C 在第三个位置(索引从 0 开始)

4. 修改索引

如果你想要修改 Series 的索引,可以使用 index 属性:

data.index = ['X', 'Y', 'Z', 'W', 'V']
print(data)

输出:

X    10
Y    20
Z    30
W    40
V    50
dtype: int64

5. 重新索引(reindex)

reindex() 方法用于更改索引,并可以自动填充缺失值。

new_index = ['A', 'B', 'C', 'D', 'E', 'F']
new_data = data.reindex(new_index, fill_value=0)
print(new_data)

输出:

A    10
B    20
C    30
D    40
E    50
F     0
dtype: int64

fill_value=0 指定对于新添加的索引(如 ‘F’),填充 0。


6. 使用字典创建带索引的 Series

你可以使用 Python 字典创建 Series,其中字典的键将自动成为索引。

data = pd.Series({'Apple': 5, 'Banana': 3, 'Cherry': 7})
print(data)

输出:

Apple     5
Banana    3
Cherry    7
dtype: int64

7. 检测索引是否存在

你可以检查某个索引是否存在于 Series 中:

print('Apple' in data)   # True
print('Mango' in data)   # False

8. 删除索引项

你可以使用 drop() 方法删除某个索引项:

data = data.drop('Banana')
print(data)

输出:

Apple     5
Cherry    7
dtype: int64

9. 索引排序

使用 sort_index() 对 Series 进行索引排序:

data = pd.Series({'Banana': 3, 'Cherry': 7, 'Apple': 5})
sorted_data = data.sort_index()
print(sorted_data)

输出:

Apple     5
Banana    3
Cherry    7
dtype: int64

默认情况下是按字母升序排列,若要降序排列:

sorted_data = data.sort_index(ascending=False)
print(sorted_data)

输出:

Cherry    7
Banana    3
Apple     5
dtype: int64

10. 索引重命名

可以使用 rename() 方法重命名索引:

data = data.rename(index={'Banana': 'Yellow Fruit', 'Cherry': 'Red Fruit'})
print(data)

输出:

Apple          5
Yellow Fruit   3
Red Fruit      7
dtype: int64

总结

Pandas Series 提供了强大的索引功能,使数据处理更加灵活和高效:

  1. 自定义索引:可以在创建时指定索引,或者后续修改索引。
  2. 访问数据
    • 通过标签索引(data['A'])。
    • 通过 .loc[] 方法(data.loc['A'])。
    • 通过整数索引 .iloc[] 访问(data.iloc[2])。
  3. 修改索引:使用 .index 属性或者 reindex() 方法。
  4. 字典创建 Series:字典的键会自动变成索引。
  5. 索引操作
    • drop() 删除索引项。
    • sort_index() 按索引排序。
    • rename() 重命名索引。

使用 Pandas Series 自定义索引可以更直观地表示数据,并让数据访问更加高效!

2. Pandas Series 自定义索引 综合实战

下面是一个基于 Pandas Series 自定义索引的综合实战示例。这个示例涵盖了创建 Series、修改索引、索引重命名、索引排序、索引操作等方面,帮助你深入理解如何灵活使用 Pandas 的索引功能。

1. 创建带有自定义索引的 Series

假设你有一个销售数据集,每个产品的销售数量对应于特定的索引标签(如产品名称):

import pandas as pd

# 创建 Series,指定自定义索引(产品名称)
sales_data = pd.Series([500, 1200, 800, 1500, 200], index=['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'])

# 输出 Series
print(sales_data)

输出:

Apple        500
Banana      1200
Cherry       800
Date        1500
Elderberry   200
dtype: int64

2. 访问数据

通过自定义索引访问数据比直接使用默认的整数索引更具可读性和便利性。

# 访问单个索引标签的销售数据
print(sales_data['Banana'])  # 输出 1200

# 通过 .loc[] 方法访问
print(sales_data.loc['Date'])  # 输出 1500

3. 修改索引

有时你可能希望对已有 Series 的索引进行修改,使其更加符合实际需求。

# 修改索引,重新命名产品
sales_data.index = ['Fruit_A', 'Fruit_B', 'Fruit_C', 'Fruit_D', 'Fruit_E']

# 输出修改后的 Series
print(sales_data)

输出:

Fruit_A     500
Fruit_B    1200
Fruit_C     800
Fruit_D    1500
Fruit_E     200
dtype: int64

4. 重新索引(Reindex)

假设你想对现有数据进行重新排序或添加新的索引标签,可以使用 reindex() 方法。还可以指定填充缺失值的方法(如 fill_value)。

# 创建一个新的索引标签
new_index = ['Fruit_B', 'Fruit_C', 'Fruit_F', 'Fruit_A', 'Fruit_E']

# 重新排序数据并为缺失的索引填充默认值(0)
reindexed_data = sales_data.reindex(new_index, fill_value=0)
print(reindexed_data)

输出:

Fruit_B    1200
Fruit_C     800
Fruit_F       0
Fruit_A     500
Fruit_E     200
dtype: int64

可以看到,Fruit_F 在原始数据中没有对应项,因此它的值被填充为 0。


5. 删除索引项

通过 drop() 方法可以删除不需要的索引项。假设你不再关心 Date 产品的销售数据:

# 删除 'Fruit_D' 销售数据
sales_data = sales_data.drop('Fruit_D')
print(sales_data)

输出:

Fruit_A     500
Fruit_B    1200
Fruit_C     800
Fruit_E     200
dtype: int64

6. 索引排序

有时你可能希望根据索引的字母顺序或大小对数据进行排序:

# 根据索引(字母顺序)排序
sorted_sales = sales_data.sort_index()
print(sorted_sales)

输出:

Fruit_A     500
Fruit_B    1200
Fruit_C     800
Fruit_E     200
dtype: int64

如果希望按照索引降序排序,可以设置 ascending=False

sorted_sales_desc = sales_data.sort_index(ascending=False)
print(sorted_sales_desc)

输出:

Fruit_E     200
Fruit_C     800
Fruit_B    1200
Fruit_A     500
dtype: int64

7. 索引重命名

你可以通过 rename() 方法重新命名 Series 中的索引。假设你想将 Fruit_A 改名为 AppleFruit_B 改名为 Banana 等。

# 使用 rename() 重命名索引
sales_data_renamed = sales_data.rename(index={'Fruit_A': 'Apple', 'Fruit_B': 'Banana', 'Fruit_C': 'Cherry', 'Fruit_E': 'Elderberry'})
print(sales_data_renamed)

输出:

Apple         500
Banana       1200
Cherry        800
Elderberry    200
dtype: int64

8. 自定义索引条件筛选

你还可以根据自定义的条件筛选数据。例如,筛选销售额大于 800 的产品。

# 通过条件筛选索引
high_sales = sales_data[sales_data > 800]
print(high_sales)

输出:

Fruit_B    1200
Fruit_C     800
dtype: int64

9. 检测索引是否存在

你可以检查某个特定的索引是否存在:

# 检查某个索引是否存在
print('Fruit_A' in sales_data)  # True
print('Fruit_F' in sales_data)  # False

10. 综合实战代码

将以上步骤整合成一个完整的实战代码:

import pandas as pd

# 创建带自定义索引的 Series
sales_data = pd.Series([500, 1200, 800, 1500, 200], index=['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'])
print("原始数据:")
print(sales_data)

# 修改索引
sales_data.index = ['Fruit_A', 'Fruit_B', 'Fruit_C', 'Fruit_D', 'Fruit_E']
print("\n修改后的数据:")
print(sales_data)

# 重新索引并填充缺失值
new_index = ['Fruit_B', 'Fruit_C', 'Fruit_F', 'Fruit_A', 'Fruit_E']
reindexed_data = sales_data.reindex(new_index, fill_value=0)
print("\n重新索引后的数据:")
print(reindexed_data)

# 删除索引项
sales_data = sales_data.drop('Fruit_D')
print("\n删除 'Fruit_D' 后的数据:")
print(sales_data)

# 排序索引
sorted_sales = sales_data.sort_index()
print("\n按索引排序后的数据:")
print(sorted_sales)

# 重命名索引
sales_data_renamed = sales_data.rename(index={'Fruit_A': 'Apple', 'Fruit_B': 'Banana', 'Fruit_C': 'Cherry', 'Fruit_E': 'Elderberry'})
print("\n重命名后的数据:")
print(sales_data_renamed)

# 根据条件筛选数据
high_sales = sales_data[sales_data > 800]
print("\n筛选销售额大于 800 的产品:")
print(high_sales)

# 检查索引是否存在
print("\n检查索引是否存在:")
print('Fruit_A' in sales_data)  # True
print('Fruit_F' in sales_data)  # False

总结

在 Pandas 中,Series 的自定义索引功能为数据操作和分析提供了极大的便利。通过自定义索引,你可以:

  • 更清晰地表示数据;
  • 灵活地进行数据选择、筛选和删除;
  • 方便地对数据进行排序、重命名等操作。

通过以上综合示例,你可以全面掌握如何在 Pandas Series 中进行索引操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Agent首席体验官

您的打赏是我继续创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值