重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

重置行列标签

看一组简单示例:

  1. import pandas as pd
  2. import numpy as np
  3. N=20
  4. df = pd.DataFrame({
  5. 'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
  6. 'x': np.linspace(0,stop=N-1,num=N),
  7. 'y': np.random.rand(N),
  8. 'C': np.random.choice(['Low','Medium','High'],N).tolist(),
  9. 'D': np.random.normal(100, 10, size=(N)).tolist()
  10. })
  11. #重置行、列索引标签
  12. df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
  13. print(df_reindexed)

输出结果:

           A       C   B
0 2020-12-07 Medium NaN
2 2020-12-09 Low NaN
5 2020-12-12 High NaN

现有 a、b 两个 DataFrame 对象,如果想让 a  的行索引与 b 相同,您可以使用 reindex_like() 方法。示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. a = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
  4. b = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
  5. a= a.reindex_like(b)
  6. print(a)

输出结果:

       col1      col2      col3
0 1.776556 -0.821724 -1.220195
1 -1.401443 0.317407 -0.663848
2 0.300353 -1.010991 0.939143
3 0.444041 -1.875384 0.846112
4 0.967159 0.369450 -0.414128
5 0.320863 -1.223477 -0.337110
6 -0.933665 0.909382 1.129481

上述示例,a 会按照 b 的形式重建行索引。需要特别注意的是,a 与 b 的列索引标签必须相同。

填充元素值

reindex_like() 提供了一个可选的参数method,使用它来填充相应的元素值,参数值介绍如下:

  • pad/ffill:向前填充值;
  • bfill/backfill:向后填充值;
  • nearest:从距离最近的索引值开始填充。

示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
  4. df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
  5. #使df2和df1行标签相同
  6. print(df2.reindex_like(df1))
  7. #向前填充
  8. print(df2.reindex_like(df1,method='ffill'))

输出结果:

#填充前
col1 col2 col3
0 0.129055 0.835440 0.383065
1 -0.357231 0.379293 1.211549
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
#填充后
col1 col2 col3
0 0.129055 0.835440 0.383065
1 -0.357231 0.379293 1.211549
2 -0.357231 0.379293 1.211549
3 -0.357231 0.379293 1.211549
4 -0.357231 0.379293 1.211549
5 -0.357231 0.379293 1.211549

限制填充行数

reindex_like() 还提供了一个额外参数 limit,该参数用来控制填充的最大行数。示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
  4. df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
  5. print (df2.reindex_like(df1))
  6. #最多填充2行
  7. print (df2.reindex_like(df1,method='ffill',limit=2))

输出结果:

       col1      col2      col3
0 -1.829469 0.310332 -2.008861
1 -1.038512 0.749333 -0.094335
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN col1 col2 col3
0 -1.829469 0.310332 -2.008861
1 -1.038512 0.749333 -0.094335
2 -1.038512 0.749333 -0.094335
3 -1.038512 0.749333 -0.094335
4 NaN NaN NaN
5 NaN NaN NaN

由上述示例可以看出,填充了 2、3 行 缺失值,也就是只填充了 2 行数据。

重命名标签

rename() 方法允许您使用某些映射(dict或Series)或任意函数来对行、列标签重新命名,示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
  4. print (df1)
  5. #对行和列重新命名
  6. print (df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

输出结果:

       col1      col2      col3
0 -1.762133 -0.636819 -0.309572
1 -0.093965 -0.924387 -2.031457
2 -1.231485 -0.738667 1.415724
3 -0.826322 0.206574 -0.731701
4 1.863816 -0.175705 0.491907
5 0.677361 0.870041 -0.636518 c1 c2 col3
apple -1.762133 -0.636819 -0.309572
banana -0.093965 -0.924387 -2.031457
durian -1.231485 -0.738667 1.415724
3 -0.826322 0.206574 -0.731701
4 1.863816 -0.175705 0.491907
5 0.677361 0.870041 -0.636518

rename() 方法提供了一个 inplace 参数,默认值为 False,表示拷贝一份原数据,并在复制后的数据上做重命名操作。若 inplace=True 则表示在原数据的基础上重命名。

pandas之reindex重置索引的更多相关文章

  1. Lesson8——Pandas reindex重置索引

    pandas目录 1 简介 重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行.列标签与 DataFrame 中的数据逐一匹配.通过重置索引操作,您可以完成对现 ...

  2. 【pandas】pandas.DataFrame.rename()---重置索引名称

    官方文档 github地址 例子: 创建DataFrame ### 导入模块 import numpy as np import pandas as pd import matplotlib.pypl ...

  3. Pandas基本功能之reindex重新索引

    重新索引 reindex重置索引,如果索引值不存在,就引入缺失值 参数介绍 参数 说明 index 用作索引的新序列 method 插值 fill_vlaue 引入缺失值时的替代NaN limit 最 ...

  4. pandas重置索引的几种方法探究

    pandas重置索引的几种方法探究 reset_index() reindex() set_index() 函数名字看起来非常有趣吧! 不仅如此. 需要探究. http://nbviewer.jupy ...

  5. pandas中DataFrame重置设置索引

    在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...

  6. pandas学习(创建多层索引、数据重塑与轴向旋转)

    pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...

  7. pandas数组获取最大值索引的方法-argmax和idxmax

    pandas Series 的 argmax 方法和 idxmax 方法用于获取 Series 的最大值的索引值: 举个栗子: 有一个pandas Series,它的索引是国家名,数据是就业率,要找出 ...

  8. pandas DataFrame(2)-行列索引及值的获取

    pandas DataFrame是二维的,所以,它既有列索引,又有行索引 上一篇里只介绍了列索引: import pandas as pd df = pd.DataFrame({'A': [0, 1, ...

  9. REINDEX - 重建索引

    SYNOPSIS REINDEX { DATABASE | TABLE | INDEX } name [ FORCE ] DESCRIPTION 描述 REINDEX 基于存储在表上的数据重建索引, ...

  10. 8 pandas模块,多层索引

      1 创建多层索引     1)隐式构造         最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组           · Series也可以创建多层索引    ...

随机推荐

  1. C语言——使用循环和递归计算阶乘

    使用循环和递归计算阶乘: /*使用循环和递归计算阶乘*/ #include<stdio.h> double fact(int num);//函数声明,阶乘函数,用于循环时调用 double ...

  2. Leetcode209

    209. Minimum Size Subarray Sum         i , s , l = 0, 0, 0         for j in range(len(nums)):        ...

  3. base64格式上传图片方法

    function dataURItoBlob(dataURI) { const byteString = atob(dataURI.split(',')[1]); const mimeString = ...

  4. centos 挂载共享目录

    共享目录://10.253.47.102/share/文件传递暂用 将共享路径挂载到centos /etc/fstab  添加一行配置,mount -a 生效

  5. .NetCore中配置Ef

    1.在NuGet中下载 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.SqlServer 2.需要在Api层.实现 ...

  6. 04 Hadoop思想与原理

    Hadoop最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题--如何解决数十亿网页的存储和索引 ...

  7. linux sync命令

    Linux sync命令用于数据同步,sync命令是在关闭Linux系统时使用的. Linux 系统中欲写入硬盘的资料有的时候为了效率起见,会写到 filesystem buffer 中,这个 buf ...

  8. 容器数据库(CDB)和传统的非容器数据库的区别

    传统的非容器数据库在系统元数据和实例资源没有进行任何共享.容器数据库把 Oracle 提供的元数据.后台进程以及内存结构进行共享,把每个部门数据库的存储结构以 PDB 的形式独立出来,从而实现了系统资 ...

  9. 解决Tomcat 启动,http://localhost:8080无法访问 问题

    注意:1:tomact能正常启动 2 : 通过startup启动后可以正常访问8080界面: 3: 通过eclipse启动后无法正常访问8080界面: Tomcat能在eclipse里面能正常启动,但 ...

  10. 使用EFCode First模式

    1.添加EntityFrameworkCoreg和EntityFrameworkCore.Design这两个包 2.添加EF上下文类 例如下图如下: 1 using EntityModel; 2 us ...