杰瑞科技汇

python dataframe行名

在 Pandas 中,每一行都有一个标签,这个标签就是行索引,它不像列名那样在列的顶部显示,而是位于 DataFrame 的最左侧,行索引的主要作用是:

python dataframe行名-图1
(图片来源网络,侵删)
  1. 唯一标识:快速、唯一地定位到某一行或某几行数据。
  2. 数据对齐:在进行算术运算、合并等操作时,Pandas 会根据行索引自动对齐数据。
  3. 数据筛选:可以方便地通过索引选择、筛选数据。

如何获取行索引

使用 DataFrame 的 .index 属性可以获取行索引。

import pandas as pd
import numpy as np
# 创建一个示例 DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],
        '年龄': [25, 30, 28, 35],
        '城市': ['北京', '上海', '广州', '深圳']}
df = pd.DataFrame(data)
# 默认情况下,行索引是 0, 1, 2, 3...
print("原始 DataFrame:")
print(df)
print("\n")
# 获取行索引
print("行索引对象:")
print(df.index)
print("\n")
# 获取行索引的类型
print("行索引的类型:", type(df.index))

输出:

原始 DataFrame:
   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州
3  赵六  35  深圳
行索引对象:
RangeIndex(start=0, stop=4, step=1)
行索引的类型: <class 'pandas.core.indexes.range.RangeIndex'>

可以看到,默认情况下,Pandas 创建了一个 RangeIndex,这是一个从 0 开始的整数索引。


如何设置或修改行索引

你可以将 DataFrame 中的任何一列设置为新的行索引。

python dataframe行名-图2
(图片来源网络,侵删)

使用 set_index() 方法

这是最常用的方法,它会返回一个新的 DataFrame,原 DataFrame 不会被修改(除非使用 inplace=True)。

# 将 '姓名' 列设置为行索引
df_indexed_by_name = df.set_index('姓名')
print("将 '姓名' 设为行索引后的 DataFrame:")
print(df_indexed_by_name)
print("\n")
# 查看新的行索引
print("新的行索引:", df_indexed_by_name.index)

输出:

将 '姓名' 设为行索引后的 DataFrame:
      年龄  城市
姓名
张三   25  北京
李四   30  上海
王五   28  广州
赵六   35  深圳
新的行索引: Index(['张三', '李四', '王五', '赵六'], dtype='object')

inplace=True 参数

如果你希望直接在原 DataFrame 上修改,而不是创建一个新的,可以使用 inplace=True

print("修改前的 df:")
print(df)
print("\n")
# 直接在原 DataFrame 上修改
df.set_index('姓名', inplace=True)
print("修改后的 df:")
print(df)

输出:

python dataframe行名-图3
(图片来源网络,侵删)
修改前的 df:
   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州
3  赵六  35  深圳
修改后的 df:
      年龄  城市
姓名
张三   25  北京
李四   30  上海
王五   28  广州
赵六   35  深圳

设置多列为索引

你也可以将多列组合成一个多级索引(或称分层索引)。

# 重置索引以便演示
df.reset_index(inplace=True)
# 将 '城市' 和 '姓名' 两列设置为多级索引
df_multi_indexed = df.set_index(['城市', '姓名'])
print("多级索引 DataFrame:")
print(df_multi_indexed)
print("\n")
print("多级索引对象:")
print(df_multi_indexed.index)

输出:

多级索引 DataFrame:
           年龄
城市  姓名
北京  张三   25
上海  李四   30
广州  王五   28
深圳  赵六   35
多级索引对象:
MultiIndex([(北京, 张三),
            (上海, 李四),
            (广州, 王五),
            (深圳, 赵六)],
           names=['城市', '姓名'])

如何重置行索引

如果你想把当前的行索引变回默认的整数索引(0, 1, 2, ...),可以使用 reset_index() 方法。

默认情况下,reset_index() 会将旧的索引变成一个新的列。

# 假设 df 当前有一个 '姓名' 行索引
print("重置前的 df (索引为 '姓名'):")
print(df)
print("\n")
# 重置索引
df_reset = df.reset_index()
print("重置索引后的 df:")
print(df_reset)

输出:

重置前的 df (索引为 '姓名'):
      年龄  城市
姓名
张三   25  北京
李四   30  上海
王五   28  广州
赵六   35  深圳
重置索引后的 df:
  姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州
3  赵六  35  深圳

drop=True 参数

如果你不希望将旧索引保留为列,而是直接丢弃它,可以使用 drop=True

# 直接丢弃旧索引,不创建新列
df_reset_dropped = df.reset_index(drop=True)
print("使用 drop=True 重置索引后的 df:")
print(df_reset_dropped)

输出:

使用 drop=True 重置索引后的 df:
      年龄  城市
0   25  北京
1   30  上海
2   28  广州
3   35  深圳

如何修改单个行索引的值

如果你想修改特定行的索引标签,可以使用 .index__setitem__ 方法(即 df.index[i] = new_value)。

# 假设 df 的索引是 ['张三', '李四', '王五', '赵六']
print("修改前的索引:", df.index)
print(df)
print("\n")
# 将 '王五' 的索引修改为 '王五(组长)'
df.index[2] = '王五(组长)'
print("修改后的索引:", df.index)
print("\n")
print("修改后的 DataFrame:")
print(df)

输出:

修改前的索引: Index(['张三', '李四', '王五', '赵六'], dtype='object', name='姓名')
      年龄  城市
姓名
张三   25  北京
李四   30  上海
王五   28  广州
赵六   35  深圳
修改后的索引: Index(['张三', '李四', '王五(组长)', '赵六'], dtype='object', name='姓名')
修改后的 DataFrame:
            年龄  城市
姓名
张三         25  北京
李四         30  上海
王五(组长)   28  广州
赵六         35  深圳

如何重命名行索引

如果你想把整个索引的名称改掉,而不是修改索引的值,可以使用 .name 属性。

# 假设 df 的索引名称是 '姓名'
print("修改前的索引名称:", df.index.name)
# 修改索引名称
df.index.name = '员工姓名'
print("修改后的索引名称:", df.index.name)
print("\n")
print("索引名称修改后的 DataFrame:")
print(df)

输出:

修改前的索引名称: 姓名
修改后的索引名称: 员工姓名
索引名称修改后的 DataFrame:
            年龄  城市
员工姓名
张三         25  北京
李四         30  上海
王五(组长)   28  广州
赵六         35  深圳

如何通过索引选择行

这是行索引最重要的应用之一。

使用 .loc (基于标签)

.loc 使用行和列的进行选择。

# 选择索引为 '李四' 的行
print("选择索引为 '李四' 的行:")
print(df.loc['李四'])
print("\n")
# 选择多个索引
print("选择 '张三' 和 '赵六' 的行:")
print(df.loc[['张三', '赵六']])
print("\n")
# 使用切片 (注意:与 Python 列表不同,loc 的切片是包含结束标签的)
print("选择从 '李四' 到 '王五(组长)' 的行:")
print(df.loc['李四':'王五(组长)'])

使用 .iloc (基于整数位置)

.iloc 使用行和列的整数位置(从 0 开始)进行选择,与索引的标签无关。

# 选择第 1 行 (索引是 '李四')
print("选择第 1 行 (位置 1):")
print(df.iloc[1])
print("\n")
# 选择第 0 行和第 3 行
print("选择第 0 行和第 3 行:")
print(df.iloc[[0, 3]])
print("\n")
# 使用切片 (与 Python 列表行为一致,不包含结束位置)
print("选择从第 1 行到第 2 行 (位置 1 到 2):")
print(df.iloc[1:3])

操作 方法/属性 描述 示例
获取索引 df.index 获取当前 DataFrame 的行索引对象。 print(df.index)
设置索引 df.set_index('列名') 将指定列设置为新的行索引,返回新 DataFrame。 df = df.set_index('姓名')
原地设置索引 df.set_index('列名', inplace=True) 直接在原 DataFrame 上修改索引。 df.set_index('年龄', inplace=True)
重置索引 df.reset_index() 将索引变回默认整数索引,旧索引变为新列。 df = df.reset_index()
重置并丢弃索引 df.reset_index(drop=True) 将索引变回默认整数索引,并丢弃旧索引。 df.reset_index(drop=True, inplace=True)
修改索引值 df.index[i] = '新值' 修改第 i 个索引标签的值。 df.index[0] = '新员工'
重命名索引 df.index.name = '新名称' 修改整个索引的名称。 df.index.name = 'ID'
按标签选行 df.loc['标签'] 根据行标签选择一行或多行。 df.loc['李四']
按位置选行 df.iloc[位置] 根据行整数位置选择一行或多行。 df.iloc[1]

掌握这些操作,你就可以灵活地管理和操作 Pandas DataFrame 的行索引了。

分享:
扫描分享到社交APP
上一篇
下一篇