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
提供了强大的索引功能,使数据处理更加灵活和高效:
- 自定义索引:可以在创建时指定索引,或者后续修改索引。
- 访问数据:
- 通过标签索引(
data['A']
)。 - 通过
.loc[]
方法(data.loc['A']
)。 - 通过整数索引
.iloc[]
访问(data.iloc[2]
)。
- 通过标签索引(
- 修改索引:使用
.index
属性或者reindex()
方法。 - 字典创建 Series:字典的键会自动变成索引。
- 索引操作:
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
改名为 Apple
,Fruit_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 中进行索引操作。