pandas 数据分析:索引重置 - reset_index


Index 介绍

在 pandas 中,Index 的种类众多。

  • Index
  • RangeIndex
  • CategoricalIndex
  • MultiIndex
  • IntervalIndex
  • DatetimeIndex
  • TimedeltaIndex
  • PeriodIndex

Index 作为一个用以进行索引和对齐的不可变序列,在 SeriesDataFrame 对象中作为属性之一,也有着至关重要的作用。

下面是关于 SeriesDataFrame 在使用 reset_index 方法进行重置索引的详细介绍,以供参考。


reset_index

对于 Series

语法Series.reset_index(可选参数),返回一个 SeriesDataFrame 或空值。

可选参数包含一个位置参数 level 以及一些关键字参数,如 dropname 等。

  • level 参数:可以是 int, str, tuple, or list,选择级别。默认值为 None。对于具有多级索引的 Series,重置指定的级别。默认情况下重置所有级别的索引。

  • drop 参数:

    • bool False:默认值,保留索引作为列,插入新建的 DataFrame 中,并返回;
    • bool True:只重置索引,而不将其作为列保留,所以返回的还是一个 Series
  • name 参数:修改 Series 唯一一数据列的列名,而非 Index 的。drop=True 时被忽略。

  • inplace 参数:

    • bool False:默认值,非原地操作;
    • bool True原地操作,前提是 drop=True,以至于可以顺利修改 原Series
  • allow_duplicates 参数:
    • bool False:默认值,允许创建重复的列标签,当原列名中包含索引的 name 时报错。
    • bool True:允许创建重复的列标签。

① 实例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 以及一些关键字参数,如 dropnames 等。

  • level 参数:可以是 int, str, tuple, or list,选择级别,重置指定的级别。默认值为 None。默认情况下重置所有级别的索引。

  • drop 参数:

    • bool False:默认值,保留索引作为列,插入新建的 DataFrame 中,并返回;
    • bool True:只重置索引,而不将其作为列保留。
  • inplace 参数:

    • bool False:默认值,非原地操作;
    • bool True原地操作,前提是 drop=True,以至于可以顺利修改 原Series
  • col_level 参数:可以是整数或字符串,默认值为 0。在多级列名时,指定将索引的 name 插入哪一级,默认是第一级。

  • col_fill 参数:列名补全,默认空字符串。多级列名时,索引的 name 只能插入其中一级,其余自动补全。

  • allow_duplicates 参数:

    • bool False:默认值,允许创建重复的列标签,当原列名中包含索引的 name 时报错。
    • bool True:允许创建重复的列标签。
  • 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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值