【Pandas】pandas DataFrame reset_index
Pandas2.2 DataFrame
Reindexing selection label manipulation
方法 | 描述 |
---|---|
DataFrame.add_prefix(prefix[, axis]) | 用于在 DataFrame 的行标签或列标签前添加指定前缀的方法 |
DataFrame.add_suffix(suffix[, axis]) | 用于在 DataFrame 的行标签或列标签后添加指定后缀的方法 |
DataFrame.align(other[, join, axis, level, …]) | 用于对齐两个 DataFrame 或 Series 的方法 |
DataFrame.at_time(time[, asof, axis]) | 用于筛选 特定时间点 的行的方法 |
DataFrame.between_time(start_time, end_time) | 用于筛选 指定时间范围内的数据行 的方法 |
DataFrame.drop([labels, axis, index, …]) | 用于从 DataFrame 中删除指定行或列的方法 |
DataFrame.drop_duplicates([subset, keep, …]) | 用于删除重复行的方法 |
DataFrame.duplicated([subset, keep]) | 用于检测 重复行 的方法 |
DataFrame.equals(other) | 用于比较两个 DataFrame 是否完全相等的方法 |
DataFrame.filter([items, like, regex, axis]) | 用于筛选列或行标签的方法 |
DataFrame.first(offset) | 用于选取 时间序列型 DataFrame 中从起始时间开始的一段连续时间窗口 的方法 |
DataFrame.head([n]) | 用于快速查看 DataFrame 前几行数据 的方法 |
DataFrame.idxmax([axis, skipna, numeric_only]) | 用于查找 每列或每行中最大值的索引标签 的方法 |
DataFrame.idxmin([axis, skipna, numeric_only]) | 用于查找 每列或每行中最小值的索引标签 的方法 |
DataFrame.last(offset) | 用于选取 时间序列型 DataFrame 中从最后时间点开始向前截取一段指定长度的时间窗口 的方法 |
DataFrame.reindex([labels, index, columns, …]) | 用于重新索引 DataFrame 的核心方法 |
DataFrame.reindex_like(other[, method, …]) | 用于将当前 DataFrame 的索引和列重新设置为与另一个对象(如另一个 DataFrame 或 Series)相同 |
DataFrame.rename([mapper, index, columns, …]) | 用于重命名 DataFrame 的行索引标签或列名的方法 |
DataFrame.rename_axis([mapper, index, …]) | 用于**重命名 DataFrame 的索引轴名称(index axis name)或列轴名称(column axis name)**的方法 |
DataFrame.reset_index([level, drop, …]) | 用于将 DataFrame 的索引(index)重置为默认整数索引,并将原索引作为列添加回 DataFrame 中的方法 |
pandas.DataFrame.reset_index()
pandas.DataFrame.reset_index()
是一个用于将 DataFrame 的索引(index)重置为默认整数索引,并将原索引作为列添加回 DataFrame 中的方法。它常用于处理具有自定义索引的 DataFrame
,使其恢复为标准的从 0 开始的整数索引。
📌 方法签名
DataFrame.reset_index(level=None, *, drop=False, inplace=False, col_level=0, col_fill='', allow_duplicates=<no_default>, names=None)
🔧 参数说明
参数 | 类型 | 说明 |
---|---|---|
level | int、str 或 list,默认 None | 指定要重置的索引层级(适用于 MultiIndex) |
drop | bool ,默认 False | 是否丢弃原索引而不将其作为列加入结果中 |
inplace | bool ,默认 False | 是否在原对象上修改 |
col_level | int 或 str,默认 0 | 在多级列的情况下,指定新索引列插入到哪一级 |
col_fill | str,默认 ‘’ | 在多级列时,用于填充未使用的层级名称 |
names | str 或 list,默认 None | 设置新列的名称(如果原索引有名称则自动使用) |
allow_duplicates | bool ,默认 False | 是否允许列名重复(仅在设置 names 时有效) |
✅ 返回值
- 返回一个新的
DataFrame
,其索引被重置为从 0 开始的整数索引; - 若
drop=True
,则原始索引不会作为列保留; - 若
inplace=True
,则直接修改原对象并返回None
。
🧪 示例代码及结果
示例 1:基本用法 - 重置普通索引
import pandas as pddf = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6]
}, index=['x', 'y', 'z'])print("Original DataFrame:")
print(df)# 重置索引
df_reset = df.reset_index()print("\nAfter reset_index():")
print(df_reset)
输出结果:
Original DataFrame:A B
x 1 4
y 2 5
z 3 6After reset_index():index A B
0 x 1 4
1 y 2 5
2 z 3 6
原索引
'x'
,'y'
,'z'
被转换为一列名为'index'
的列。
示例 2:不保留原索引(drop=True)
df_reset_drop = df.reset_index(drop=True)
print("\nAfter reset_index(drop=True):")
print(df_reset_drop)
输出结果:
After reset_index(drop=True):A B
0 1 4
1 2 5
2 3 6
原索引被完全丢弃,不再作为列出现。
示例 3:自定义新列名(names 参数)
df_reset_named = df.reset_index(names='old_index')
print("\nAfter reset_index(names='old_index'):")
print(df_reset_named)
输出结果:
After reset_index(names='old_index'):old_index A B
0 x 1 4
1 y 2 5
2 z 3 6
使用
names
自定义了原索引列的列名。
示例 4:多级索引重置(MultiIndex)
# 创建多级索引 DataFrame
index = pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1)], names=['group', 'id'])
df_multi = pd.DataFrame({'value': [10, 20, 30]}, index=index)print("Original MultiIndex DataFrame:")
print(df_multi)# 重置所有索引
df_reset_multi = df_multi.reset_index()
print("\nAfter reset_index() on MultiIndex:")
print(df_reset_multi)
输出结果:
Original MultiIndex DataFrame:value
group id
a 1 102 20
b 1 30After reset_index() on MultiIndex:group id value
0 a 1 10
1 a 2 20
2 b 1 30
多级索引被展开为多个列。
示例 5:只重置某一层索引(level 参数)
# 只重置第一层索引(group)
df_reset_level = df_multi.reset_index(level='group')
print("\nAfter reset_index(level='group'):")
print(df_reset_level)
输出结果:
After reset_index(level='group'):group value
id
1 a 10
2 a 20
1 b 30
只重置了
'group'
层,保留'id'
作为索引。
示例 6:重置索引并重命名列名(names + level)
# 重置所有索引并命名新列
df_reset_names = df_multi.reset_index(names=['category', 'identifier'])
print("\nAfter reset_index(names=['category', 'identifier']):")
print(df_reset_names)
输出结果:
After reset_index(names=['category', 'identifier']):category identifier value
0 a 1 10
1 a 2 20
2 b 1 30
使用
names
给多级索引列分别命名。
示例 7:与 drop=True
结合使用
# 重置索引但不保留原索引列
df_reset_drop = df.reset_index(drop=True)
print("\nAfter reset_index(drop=True):")
print(df_reset_drop)
输出结果:
After reset_index(drop=True):A B
0 1 4
1 2 5
2 3 6
🧠 应用场景
- 数据清洗:将非连续或非数字索引转换为标准整数索引;
- 模型输入准备:确保索引是标准整数,便于后续处理;
- 导出数据前处理:避免索引丢失或无法写入文件;
- 合并多个 DataFrame:统一索引结构;
- 可视化和展示:标准化输出格式,方便查看和分析。
⚠️ 注意事项
- 默认会将原索引作为列加入新的
DataFrame
; - 如果是
MultiIndex
,可以控制只重置某一层; - 使用
drop=True
可避免新增索引列; - 支持通过
names
自定义列名; - 不会修改原始数据内容,除非设置
inplace=True
; - 对于大型数据集非常安全且高效,适合链式调用。