索引
大约 3 分钟PythonPythonPandas
索引
1 介绍
通过索引可以帮助我们快速、灵活地选择和筛选数据。
# 按位置选择第二行
df.iloc[1]
# 按标签选择'A'列
df.loc[:, 'A']
# 按条件筛选数据
df[df['A'] > 2]
2 创建索引
在不指定索引的情况下,Pandas 会对每一行数据生成0,1... 的标签。当然我们也可以创建自己的索引。
2.1 自动生成的索引
import pandas as pd
# 创建一个简单的数据框
df = pd.DataFrame({
'ID': [1001, 1002, 1003, 1004],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
})
print(df)
ID Name Age
0 1001 Alice 25
1 1002 Bob 30
2 1003 Charlie 35
3 1004 David 40
2.2 使用某一列作为索引
这里指定了 ID
列作为索引。
set_index 中的参数表示直接在原来的 DataFrame 中修改。
# 将 'ID' 列设置为索引
df.set_index('ID', inplace=True)
print(df)
Name Age
ID
1001 Alice 25
1002 Bob 30
1003 Charlie 35
1004 David 40
通过索引的值,可以快速的找到某一行数据。
print(df[1003])
Name Charlie
Age 35
Name: 1003, dtype: object
2.3 重置索引
可以将当前索引重置为默认的整数索引,同时将原来的索引变为普通列。
df.set_index(['ID', 'Name'])
df_reset = df.reset_index()
print(df_reset)
ID Name Age
0 1001 Alice 25
1 1002 Bob 30
2 1003 Charlie 35
3 1004 David 40
2.4 创建新的索引
可以直接创建新的索引并赋值给 DataFrame 的索引。
new_index = ['a', 'b', 'c', 'd']
df.index = new_index
print(df)
ID Name Age
a 1001 Alice 25
b 1002 Bob 30
c 1003 Charlie 35
d 1004 David 40
2.5 多级索引
可以创建多级索引,这对于层次化的数据处理非常有用。
# 创建一个多重索引的数据框
arrays = [
['Alice', 'Alice', 'Bob', 'Bob'],
['一', '二', '一', '二']
]
index = pd.MultiIndex.from_arrays(arrays, names=('姓名', '学期'))
df = pd.DataFrame({'总成绩': [100, 99, 96, 89]}, index=index)
print(df)
总成绩
姓名 学期
Alice 一 100
二 99
Bob 一 96
二 89
按照层级查询数据。
print(df.loc[("Alice", "二")])
总成绩 99
Name: (Alice, 二), dtype: int64
3 位置索引
位置索引是基于整数的位置,选取某一行的数据。
注意一下,DataFrame 参数中的每个 key value 表示一列数据。
import pandas as pd
# 创建一个简单的数据框
df = pd.DataFrame({
'ID': [1001, 1002, 1003, 1004],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
})
选取第一行和第二行
print(df.iloc[0:2])
ID Name Age
0 1001 Alice 25
1 1002 Bob 30
选取第一行(索引从0开始)
print(df.iloc[0])
ID 1001
Name Alice
Age 25
Name: 0, dtype: object
选取第一列
print(df.iloc[:, 0])
0 1001
1 1002
2 1003
3 1004
Name: ID, dtype: int64
选取第一行第一列的元素
print(df.iloc[0, 0])
1001
4 标签索引
使用 .loc
进行标签索引,基于行和列的标签选择数据。
选取标签为 1001 的行
import pandas as pd
# 创建一个简单的数据框
df = pd.DataFrame({
'ID': [1001, 1002, 1003, 1004],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
})
df.set_index('ID', inplace=True)
print(df.loc[1001])
Name Alice
Age 25
Name: 1001, dtype: object
选取列标签为 Name
的列
print(df.loc[:, 'Name'])
ID
1001 Alice
1002 Bob
1003 Charlie
1004 David
Name: Name, dtype: object
选取标签为 1002
行和 Name
列的元素
print(df.loc[1002, 'Name'])
Bob
5 布尔索引
使用布尔条件进行索引,可以选择满足条件的行。
# 创建一个简单的数据框
df = pd.DataFrame({
'ID': [1001, 1002, 1003, 1004],
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
})
# 选取'Age'列大于30的行
print(df[df['Age'] > 30])
# 多个条件
print(df[(df['Age'] > 30) & (df['ID'] > 1003)])
ID Name Age
2 1003 Charlie 35
3 1004 David 40
ID Name Age
3 1004 David 40