跳至主要內容

索引

blacklad大约 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
上次编辑于:
贡献者: blacklad