Index 介绍
在 pandas 中,Index 的种类众多。
- Index
- RangeIndex
- CategoricalIndex
- MultiIndex
- IntervalIndex
- DatetimeIndex
- TimedeltaIndex
- PeriodIndex
Index 作为一个用以进行索引和对齐的不可变序列,在 Series 和 DataFrame 对象中作为属性之一,也有着至关重要的作用。
下面是关于 Series 和 DataFrame 在使用 reset_index
方法进行重置索引的详细介绍,以供参考。
reset_index
对于 Series
语法:Series.reset_index(可选参数)
,返回一个 Series、DataFrame 或空值。
可选参数包含一个位置参数 level
以及一些关键字参数,如 drop
、name
等。
-
level 参数:可以是
int, str, tuple, or list
,选择级别。默认值为None
。对于具有多级索引的 Series,重置指定的级别。默认情况下重置所有级别的索引。 -
drop 参数:
- bool
False
:默认值,保留索引作为列,插入新建的 DataFrame 中,并返回; - bool
True
:只重置索引,而不将其作为列保留,所以返回的还是一个 Series。
- bool
-
name 参数:修改 Series 唯一一数据列的列名,而非 Index 的。
drop=True
时被忽略。 -
inplace 参数:
- bool
False
:默认值,非原地操作; - bool
True
:原地操作,前提是drop=True
,以至于可以顺利修改 原Series。
- bool
- allow_duplicates 参数:
- bool
False
:默认值,允许创建重复的列标签,当原列名中包含索引的 name 时报错。 - bool
True
:允许创建重复的列标签。
- bool
① 实例1:Index 和 Series 都没有设置 name。
列名自动补全如下。
ps1 = pd.Series([1, 2, 3, 4, 5])
ps1.reset_index()
# result bellow
index 0
0 0 1
1 1 2
2 2 3
3 3 4
4 4 5
② 实例2:Index 和 Series 都有 name,通过参数重新设置列名。
name 参数影响的列名是 Series 的数据列。
dates = pd.date_range("20230701", periods=5, name="date")
ps2 = pd.Series([1, 2, 3, 4, 5], name="Int", index=dates)
ps2.reset_index(name="整数")
# result bellow
date 整数
0 2023-07-01 1
1 2023-07-02 2
2 2023-07-03 3
3 2023-07-04 4
4 2023-07-05 5
③ 实例3:原地操作。
drop=True 使得 name 参数被忽略。
dates = pd.date_range("20230701", periods=5, name="date")
ps2 = pd.Series([1, 2, 3, 4, 5], name="Int", index=dates)
ps2.reset_index(drop=True, inplace=True, name="整数")
ps2
# result bellow
0 1
1 2
2 3
3 4
4 5
Name: Int, dtype: int64
对于 DataFrame
语法:DataFrame.reset_index(可选参数)
,返回一个新 DataFrame 或空值。
可选参数包含一个位置参数 level
以及一些关键字参数,如 drop
、names
等。
-
level 参数:可以是
int, str, tuple, or list
,选择级别,重置指定的级别。默认值为None
。默认情况下重置所有级别的索引。 -
drop 参数:
- bool
False
:默认值,保留索引作为列,插入新建的 DataFrame 中,并返回; - bool
True
:只重置索引,而不将其作为列保留。
- bool
-
inplace 参数:
- bool
False
:默认值,非原地操作; - bool
True
:原地操作,前提是drop=True
,以至于可以顺利修改 原Series。
- bool
-
col_level 参数:可以是整数或字符串,默认值为 0。在多级列名时,指定将索引的 name 插入哪一级,默认是第一级。
-
col_fill 参数:列名补全,默认空字符串。多级列名时,索引的 name 只能插入其中一级,其余自动补全。
-
allow_duplicates 参数:
- bool
False
:默认值,允许创建重复的列标签,当原列名中包含索引的 name 时报错。 - bool
True
:允许创建重复的列标签。
- bool
-
names 参数:可以是
int, str or 1-dimensional list
,默认空值。- 当一级索引时,可以是一个整数、一个字符串或一维数组(第一项有效),索引作为列插入 DataFrame 时将以其为列名;
- 多级索引时,必须是等长的一维数组,用以给每一级的索引作为列时的列名。
- 默认空值时,自动补全。
① 实例1:一级索引的重置。
idx = pd.Index(list("甲乙丙丁戊己庚辛壬癸"), name="10天干")
data = [['A', 'Math'], ['B', 'English'], ['C', 'Math'], ['D', 'Biology'], ['E', 'Math'],
['F', 'Computer'], ['G', 'Math'], ['H', 'Math'], ['I', 'Math'], ['J', 'Math']]
courses = pd.DataFrame(data, columns=['student', 'class'], index=idx)
courses.reset_index(name="序号")
# result bellow
序号 student class
0 甲 A Math
1 乙 B English
2 丙 C Math
3 丁 D Biology
4 戊 E Math
5 己 F Computer
6 庚 G Math
7 辛 H Math
8 壬 I Math
9 癸 J Math
② 实例2:多级索引的重置。
idx2 = pd.Index([('甲', '子'), ('甲', '丑'), ('甲', '寅'), ('乙', '子'), ('乙', '丑'),
('乙', '寅'), ('乙', '卯'), ('丙', '子'), ('丙', '丑'), ('丙', '寅')])
idx3 = pd.MultiIndex.from_arrays([['甲', '甲', '甲', '乙', '乙', '乙', '乙', '丙', '丙', '丙'],
['子', '丑', '寅', '子', '丑', '寅', '卯', '子', '丑', '寅']], names=["天干", "地支"])
data = [['A', 'Math'], ['B', 'English'], ['C', 'Math'], ['D', 'Biology'], ['E', 'Math'],
['F', 'Computer'], ['G', 'Math'], ['H', 'Math'], ['I', 'Math'], ['J', 'Math']]
courses2 = pd.DataFrame(data, columns=['student', 'class'], index=idx2)
courses3 = pd.DataFrame(data, columns=['student', 'class'], index=idx3)
courses2.reset_index(name=["序号1", "序号2"])
courses3.reset_index(name=["序号1", "序号2"])
# result bellow
序号1 序号2 student class
0 甲 子 A Math
1 甲 丑 B English
2 甲 寅 C Math
3 乙 子 D Biology
4 乙 丑 E Math
5 乙 寅 F Computer
6 乙 卯 G Math
7 丙 子 H Math
8 丙 丑 I Math
9 丙 寅 J Math