Pandas 中的重新索引

简介: 【8月更文挑战第30天】

在 Pandas 中,重新索引是一个功能强大的操作,可用于修改 DataFrame 或 Series 的索引。它允许您添加、删除或替换索引中的值,以及重新排列它们的顺序。

重新索引的运作方式

重新索引的基本原理是创建一个新的索引并使用它来分配输入对象中的值。新索引可以更长、更短或与输入索引相同。如果新索引长于输入索引,则将使用填充值(默认为 NaN)进行填充。如果新索引短于输入索引,则将删除输入索引中不在新索引中的项。

更正式地说,重新索引涉及以下步骤:

  1. 创建一个新的索引。
  2. 对于新索引中的每个值:
    • 查找输入对象中具有该值作为索引的值。
    • 如果值存在,则将其赋值给新对象的相应位置。
    • 如果值不存在,则使用填充值(默认为 NaN)填充新对象的相应位置。

语法

重新索引的语法如下:

df.reindex(new_index, axis=0, method=None, copy=True, fill_value=None)

其中:

  • new_index 是新索引,可以是列表、元组或 Index 对象。
  • axis=0 表示重新索引行索引(默认值)。要重新索引列索引,请使用 axis=1
  • method 指定用于填充新索引中不存在的值的方法。默认值为 None,表示使用 NaN 填充。其他方法包括 'ffill'(向前填充)和 'bfill'(向后填充)。
  • copy=True 表示重新索引后返回一个新对象(默认值)。如果将 copy=False,则将直接修改原始对象。
  • fill_value 指定用于填充新索引中不存在的值的值。默认值为 NaN

示例

添加索引项

import pandas as pd

df = pd.DataFrame({
   'Name': ['Alice', 'Bob', 'Carol'],
                   'Age': [20, 25, 30]})

# 添加 "Dave" 索引项
df = df.reindex(df.index.tolist() + ['Dave'])

print(df)

# 输出:
   Name  Age
0  Alice  20.0
1   Bob  25.0
2  Carol  30.0
3   Dave   NaN

删除索引项

df = df.reindex(df.index.tolist()[:-1])

print(df)

# 输出:
   Name  Age
0  Alice  20.0
1   Bob  25.0
2  Carol  30.0

替换索引

# 替换 "Carol" 为 "Charlie"
df = df.reindex(df.index.set_value(df.index.get_loc('Carol'), 'Charlie'))

print(df)

# 输出:
   Name  Age
0  Alice  20.0
1   Bob  25.0
2   Charlie  30.0

重新排列索引顺序

# 重新排列索引顺序
df = df.reindex(df.index[::-1])

print(df)

# 输出:
   Name  Age
2   Charlie  30.0
1   Bob  25.0
0  Alice  20.0

方法

除了 NaN 填充,reindex 还接受以下方法:

  • 'ffill'(向前填充):值向前填充,即使用前一个索引的值。
  • 'bfill'(向后填充):值向后填充,即使用下一个索引的值。
# 使用向前填充
df = df.reindex(df.index.tolist() + ['Dave'], method='ffill')

# 输出:
   Name  Age
0  Alice  20.0
1   Bob  25.0
2   Charlie  30.0
3   Dave  30.0
# 使用向后填充
df = df.reindex(df.index.tolist()[:-1], method='bfill')

# 输出:
   Name  Age
0  Alice  20.0
1   Bob  25.0
2   Charlie  30.0

需要注意的点

  • 重新索引可能会改变 DataFrame/Series 的形状。
  • 如果新索引重复,则会覆盖重复索引的值。
  • copy=False 用于提高性能,但可能会产生意外结果。
  • fill_value 可以是标量值或映射,映射将索引值映射到填充值。
目录
相关文章
|
4月前
|
索引 Python
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
68 1
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
|
4月前
|
索引 Python
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
53 0
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
|
4月前
|
索引 Python
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
80 1
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
|
9月前
|
索引 Python
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
127 0
|
10月前
|
数据挖掘 索引 Python
【Python】数据分析:pandas之布尔索引
【Python】数据分析:pandas之布尔索引
69 0
|
4月前
|
BI 索引 Python
python报表自动化系列 - python中索引pandas.DataFrame的内容
python报表自动化系列 - python中索引pandas.DataFrame的内容
32 0
|
4月前
|
BI 索引 Python
python报表自动化系列 - 为pandas.DataFrame制作自然数索引(更改索引为从1开始的自然数)
python报表自动化系列 - 为pandas.DataFrame制作自然数索引(更改索引为从1开始的自然数)
58 0
|
4月前
|
索引 Python
Pandas 高级教程——多级索引
Pandas 高级教程——多级索引
117 1
|
4月前
|
索引 Python
Pandas 重置索引深度总结
Pandas 重置索引深度总结
|
9月前
|
索引 Python
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
94 0