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 可以是标量值或映射,映射将索引值映射到填充值。
目录
相关文章
|
8月前
|
索引 Python
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
96 1
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
|
8月前
|
索引 Python
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
86 0
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
|
8月前
|
索引 Python
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
106 1
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
|
索引 Python
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
163 0
|
9天前
|
数据挖掘 数据处理 索引
Pandas数据重命名:列名与索引为标题
Pandas 是强大的数据分析工具,支持灵活的数据结构和操作。本文介绍如何使用 Pandas 对 `DataFrame` 的列名和索引进行重命名,包括直接赋值法、`rename()` 方法及索引修改。通过代码示例展示了具体操作,并讨论了常见问题如名称冲突、数据类型不匹配及 `inplace` 参数的使用。掌握这些技巧可使数据更清晰易懂,便于后续分析。
54 29
|
4月前
|
数据采集 数据挖掘 数据处理
如何在Pandas中将索引(index)转换为数据列
如何在Pandas中将索引(index)转换为数据列
468 0
|
数据挖掘 索引 Python
【Python】数据分析:pandas之布尔索引
【Python】数据分析:pandas之布尔索引
101 0
|
8月前
|
索引 Python
Pandas 高级教程——多级索引
Pandas 高级教程——多级索引
147 1
|
8月前
|
BI 索引 Python
python报表自动化系列 - python中索引pandas.DataFrame的内容
python报表自动化系列 - python中索引pandas.DataFrame的内容
44 0
|
8月前
|
BI 索引 Python
python报表自动化系列 - 为pandas.DataFrame制作自然数索引(更改索引为从1开始的自然数)
python报表自动化系列 - 为pandas.DataFrame制作自然数索引(更改索引为从1开始的自然数)
85 0