pandas reindex 方法

news/2024/7/5 4:32:11

pandas.Series.reindex

reindex 方法会创建一个新对象,并根据给定的新 index 对原来 Series 的数据重新组织。如果新 index 中有原来 index 不存在的 label,那么这些 label 对应位置会被填充 NaN

import pandas as pd
import numpy as np

s1 = pd.Series([4.5, 7.2, 6.6, 5.8], index=['d', 'a', 'c', 'b'])
s1
"""
d    4.5
a    7.2
c    6.6
b    5.8
dtype: float64
"""
s2 = s1.reindex(['a', 'b', 'c', 'd', 'e'])
s2
"""
a    7.2
b    5.8
c    6.6
d    4.5
e    NaN
dtype: float64
"""

通常我们想对 NaN 的位置填充一些值,这可以通过 reindex 方法的 method 参数来实现。

method{None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}

pad/ffill:会将上一个非 NaN 的值填充到此位置;

backfill/bfill:会将下一个非 NaN 的值填充到此位置;

nearest:会将最靠近的非 NaN 的值填充到此位置

s3 = pd.Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
s3
"""
0      blue
2    purple
4    yellow
dtype: object
"""
s3.reindex(range(6), method='ffill')
"""
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: object
"""

如果我们想要在 NaN 位置填充自己想要的值,可以传入 fill_value 参数:

s3.reindex(range(6), fill_value='red')
"""
0      blue
1       red
2    purple
3       red
4    yellow
5       red
dtype: object
"""

pandas.DataFrame.reindex

对于 DataFrame,reindex 方法既可以改变行标(index),也可以改变列标(column),或者两者同时改变。

df = pd.DataFrame(np.arange(9).reshape((3, 3)),
                     index=['a', 'c', 'd'],
                     columns=['BeiJ', 'ShangH', 'shenZ'])
print(df)
"""
   BeiJ  ShangH  shenZ
a     0       1      2
c     3       4      5
d     6       7      8
"""

如果 reindex 中只传入一个序列,那么默认会改变 index

df.reindex(['a', 'b', 'c', 'd'])
"""
   BeiJ  ShangH  shenZ
a   0.0     1.0    2.0
b   NaN     NaN    NaN
c   3.0     4.0    5.0
d   6.0     7.0    8.0
"""

如果想要改变列标,那么可以指定 columns 关键字:

df.reindex(columns=['BeiJ', 'XiA', 'shenZ'])
"""
   BeiJ  XiA  shenZ
a     0  NaN      2
c     3  NaN      5
d     6  NaN      8
"""

DataFrame 的 reindex 方法也有 methodfill_value 参数,含义与之前相同。

下面我们看这样一个例子:

date_index = pd.date_range('1/1/2023', periods=6, freq='D')
df = pd.DataFrame({"prices": [100, 101, np.nan, 100, 89, 88]},
                   index=date_index)
print(df)
"""
            prices
2023-01-01   100.0
2023-01-02   101.0
2023-01-03     NaN
2023-01-04   100.0
2023-01-05    89.0
2023-01-06    88.0
"""

df 进行扩充:

date_index2 = pd.date_range('12/29/2022', periods=10, freq='D')
df.reindex(date_index2)
"""
            prices
2022-12-29     NaN
2022-12-30     NaN
2022-12-31     NaN
2023-01-01   100.0
2023-01-02   101.0
2023-01-03     NaN
2023-01-04   100.0
2023-01-05    89.0
2023-01-06    88.0
2023-01-07     NaN
"""

如果使用 bfill 填充 NaN

df.reindex(date_index2, method='bfill')
"""
            prices
2022-12-29   100.0
2022-12-30   100.0
2022-12-31   100.0
2023-01-01   100.0
2023-01-02   101.0
2023-01-03     NaN
2023-01-04   100.0
2023-01-05    89.0
2023-01-06    88.0
2023-01-07     NaN
"""

注意到有两个 NaN 并没有被填充。最后一个 NaN 未被填充是因为它后面没有可供 bfill 来填充的值了。而中间的 NaN 则是因为原本的 df 该位置的值就为 NaNreindex 中的填充 method 不会对此进行填充。


References

[1] NumPy Reference. https://numpy.org/doc/stable/reference/index.html
[2] Python for Data Analysis, 2 n d ^{\rm nd} nd edition. Wes McKinney.


http://lihuaxi.xjx100.cn/news/176026.html

相关文章

机器学习-逻辑回归

机器学习-基础知识 机器学习-线性回归 机器学习-逻辑回归 机器学习-聚类算法 机器学习-决策树算法 机器学习-集成算法 机器学习-SVM算法 文章目录逻辑回归1. 线性逻辑回归1.1. 理论基础1.2. 逻辑回归模拟步骤1.2.1. 数据集1.2.2. 模拟逻辑回归类模块1.2.3. 测试模块1.2.4. 数据…

智能捡乒乓球机器人

本文素材来源于物理与电子电气工程学院 作者:丁文龙 、王小军、任剑杰、张钊铭 指导老师:康彩 一、项目简介 随着人们对机器人技术智能化本质认识的加深,机器人技术开始源源不断地向人类活动的各个领域渗透。在这其中,服务机器人…

并查集解析

文章目录🚩并查集的理解🚩并查集的结构与原理🚩并查集的实现🍁整体框架🍁路径压缩🚩总结🚩并查集的理解 并查集是基于数组操作的一个特殊数据结构,和以前学习[数组的堆排序]时有点相…

窗口函数简介与总结

目录 什么是窗口函数 窗口函数的实现原理 窗口函数使用场景 常用的窗口函数有: 1. 窗口排序函数:ROW_NUMBER()、RANK()、DENSE_RANK(); 2. 窗口聚合函数:SUM()、MIN()、MAX()、AVG(); 3. LAG() 4. LEAD() 5. …

为什么重写 equals 还要重写 hashCode 方法?

关于equals与hashCode关系的描述 我们可以先来看一下这个定理 (1)如果两个对象的 hashCode 值相等的情况下,对象的内容值不一定相等(hash碰撞问题) (2)如果使用 equals 方法比较两个对象内容值…

Qt MainWindow窗口部件简介

Qt MainWindow窗口部件简介 1、菜单栏 特性如下: 有且仅有一个**位置:**顶部 // 创建菜单 最多只能有一个 QMenuBar * bar menuBar(); // 将菜单栏放入到窗口处 setMenuBar(bar);// 创建顶部菜单 QMenu * fileMenu bar->addMenu("文件&quo…

力扣刷题(代码回忆录)——动态规划

关于动态规划,你该了解这些!动态规划:斐波那契数动态规划:爬楼梯动态规划:使用最小花费爬楼梯本周小结!(动态规划系列一)动态规划:不同路径动态规划:不同路径…

linux进阶55——service文件

实现流程 创建.service文件 创建ping.service文件,内容可以如下: [Unit] Descriptionping daemon Afternetwork.target [Service] Restarton-failure ExecStart/usr/bin/ping 127.0.0.%d ExecReload/bin/kill -s -HUP $MAINPID ExecSt…