Pandas索引操作及高级索引——reindex()方法

文章目录

  • 索引对象
    • 多个数据结构之间共享index类对象
      • is与==的区别
    • 重置索引——reindex()
  • 索引操作
    • Series的索引操作
      • 切片
      • 不连续索引
      • 布尔型索引
    • DataFrame的索引操作
      • 获取不连续的Series对象
      • 切片
  • Pandas库中的操作索引方法


索引对象

Index类对象,该对象不可以进行修改(不可变性),以保证数据的安全。


多个数据结构之间共享index类对象

基于Index类对象的不可变性,实现两个以上数据结构共享一个索引

import pandas as pd
import numpy as npser_obj1 = pd.Series(range(3), index=['a', 'b', 'c'])
ser_obj2 = pd.Series(['a', 'b', 'c'], index=ser_obj1.index)
print(ser_obj2.index is ser_obj1.index)
print(ser_obj1)
print(ser_obj2)

输出结果:

Truea    0
b    1
c    2
dtype: int64a    a
b    b
c    c
dtype: object

is与==的区别

is比较的是两个对象的地址值,也就是说两个对象是否为同一个实例对象;而==比较的是对象的值是否相等。


重置索引——reindex()

该方法的作用时对原索引和新索引进行匹配,新索引含有原索引的数据,而原索引数据按照新索引排序。

语法格式:

DataFrame.reindex(labels = None, index = None, columns = None, axis = None, method = None,
copy = None, level = None, fill_value = nan, limit = None, tolerance = None)

上述方法的部分参数含义如下:

index:用作索引的新序列

method:插值填充方式

fill_value:引入缺失值时使用的替代值

limit:前向或者后向填充时的最大填充量

如果新索引中没有原索引的数据,那么将新添加的索引的值填充为NaN。

ser_obj5 = pd.Series(range(1, 6, 1), index=['c', 'd', 'a', 'b', 'e'])
print("ser_obj5", ser_obj5)
ser_obj6 = ser_obj5.reindex(['a', 'b', 'c', 'd', 'e', 'f'])
print("ser_obj6", ser_obj6)

输出结果:

ser_obj5 
c    1
d    2
a    3
b    4
e    5
dtype: int64ser_obj6 
a    3.0
b    4.0
c    1.0
d    2.0
e    5.0
f    NaN
dtype: float64

如果不想填充为NaN,则可使用fill_value参数来指定缺失值。

ser_obj7 = ser_obj5.reindex(['a', 'b', 'c', 'd', 'e', 'f'], fill_value=6)
print("ser_obj7", ser_obj7)

输出结果:

ser_obj7 
a    3
b    4
c    1
d    2
e    5
f    6
dtype: int64

fill_value参数会让所有的缺失值都填充为同一个值。

如果期望使用相邻的元素值(上或下一个元素的值)进行填充,则可使用method参数。

参数说明
ffill 或 pad前向填充值
bfill 或 backfill后向填充值
nearest从最近的索引值填充(先后再前)
ser_obj3 = pd.Series([1, 3, 5, 7], index=[0, 2, 3, 6])
print("ser_obj3", ser_obj3)
ser_obj4 = ser_obj3.reindex(range(7), method="nearest")
print("ser_obj4", ser_obj4)

输出结果:

ser_obj3 
0    1
2    3
3    5
6    7
dtype: int64ser_obj4 
0    1
1    3
2    3
3    5
4    5
5    7
6    7
dtype: int64

索引操作

Series的索引操作

两种索引方式:

print("ser_obj1[2]:", ser_obj1[2])  # 使用索引位置获得数据
print("ser_obj1['c']:", ser_obj1['c'])  # 使用索引名称获取数据

ser_obj1

a 0
b 1
c 2
dtype: int64


输出结果:

ser_obj1[2]: 2
ser_obj1['c']: 2

切片

位置索引进行切片,切片结果包含起始位置不包括结束位置(前闭后开)

索引名称进行切片,切片结果包含起始位置包括结束位置(前闭后闭)

print("ser_obj5[2:4]:\n", ser_obj5[2:4])  # 使用位置索引进行切片
print("ser_obj7['b':'d']:\n", ser_obj7['b':'d'])  # 使用索引名称进行切片

ser_obj5

c 1
d 2
a 3
b 4
e 5
dtype: int64

ser_obj7

a 3
b 4
c 1
d 2
e 5
f 6
dtype: int64

输出结果:

ser_obj5[2:4]:a    3
b    4
dtype: int64ser_obj7['b':'d']:b    4
c    1
d    2
dtype: int64

不连续索引

print("ser_obj5[[0, 2, 4]]:\n", ser_obj5[[0, 2, 4]])  # 通过不连续位置索引获取数据集
print("ser_obj7[['a', 'c', 'e']]:\n", ser_obj7[['a', 'c', 'e']])  # 通过不连续索引名称获取数据集

输出结果:

ser_obj5[[0, 2, 4]]:c    1
a    3
e    5
dtype: int64
ser_obj7[['a', 'c', 'e']]:a    3
c    1
e    5
dtype: int64

布尔型索引

将布尔型的数组索引作为模板筛选数据,返回与模板中True位置对应的元素

ser_bool = ser_obj7 > 2  # 创建布尔型Series对象
print("ser_bool:\n", ser_bool)
print("ser_obj7[ser_bool]:\n", ser_obj7[ser_bool])  # 获取结果为True的数据

输出结果:

ser_bool:a     True
b     True
c    False
d    False
e     True
f     True
dtype: boolser_obj7[ser_bool]:a    3
b    4
e    5
f    6
dtype: int64

DataFrame的索引操作

DataFrame中每列的数据都是一个Series对象,可以使用列索引获取

arr1 = np.arange(12).reshape(3, 4)
df_obj1 = pd.DataFrame(arr1, columns=['a', 'b', 'c', 'd'])
# 创建DataFrame对象,并为其指定列索引
print("df_obj1:\n", df_obj1)
print("df_obj1['b']:\n", df_obj1['b'])  # 获取b列的数据

输出结果:

df_obj1:a  b   c   d
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11df_obj1['b']:0    1
1    5
2    9
Name: b, dtype: int32

获取不连续的Series对象

print("df_obj1[['b', 'd']]:\n", df_obj1[['b', 'd']])

输出结果:

df_obj1[['b', 'd']]:b   d
0  1   3
1  5   7
2  9  11

切片

print("df_obj1[:2]:\n", df_obj1[:2])  # 使用切片获取第0~1行的数据
print("df_obj1[:3][['b', 'd']]:\n", df_obj1[:3][['b', 'd']])
# 使用切片先通过行索引获取0~2行的数据,再通过不连续列索引获取b、d列的数据

输出结果:

df_obj1[:2]:a  b  c  d
0  0  1  2  3
1  4  5  6  7df_obj1[:3][['b', 'd']]:b   d
0  1   3
1  5   7
2  9  11

Pandas库中的操作索引方法

loc:基于标签索引(索引名称,如:a、b等),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。(前闭后闭)

iloc:基于位置索引(整数索引,如:0~length-1),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引。(前闭后开)

iloc方法主要使用整数来索引数据,而不能使用字符标签来索引数据。

loc方法只能使用字符标签来索引数据,而不能使用整数来索引数据。不过,当DataFrame对象的行索引或者列索引使用的是整数时,则其就可以使用整数来索引。

print("df_obj1.loc[:, [“d”, “b”]]:\n", df_obj1.loc[:, ["d", "b"]])
print("df_obj1.iloc[:, 3, 1]:\n", df_obj1.iloc[:, [3, 1]])

输出结果:

df_obj1.loc[:, [“d”, “b”]]d  b
0   3  1
1   7  5
2  11  9df_obj1.iloc[:, 3, 1]:d  b
0   3  1
1   7  5
2  11  9

花式索引【数组索引】

print("df_obj1.loc[:1, [“c”, “a”]]:\n", df_obj1.loc[0:1, ["c", "a"]])
print("df_obj1.iloc[:2, [2, 0]]:\n", df_obj1.iloc[0:2, [2, 0]])

输出结果:

df_obj1.loc[:1, [“c”, “a”]]:c  a
0  2  0
1  6  4df_obj1.iloc[:2, [2, 0]]:c  a
0  2  0
1  6  4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【精品计划1】动态规划入门到熟悉,看不懂来打我啊

持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)0,F(1)1, F(n)F(n-1)…

Pandas数据排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目录按索引排序——sort_index()对Series排序对DataFrame排序按值排序——sort_value()对Series进行排序对DataFrame进行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大总结2】大学两年,写了这篇几十万字的干货总结

本文是我大学两年知识的总结。涵盖数据结构、算法、语言基础、操作系统、关系数据库、NOSQL、网络/前端/项目基础知识、安全和测试、框架的学习、中间件和工具、设计模式和框架原理、我推荐的资料、我的建议 本篇文章应该算是Java后端开发技术栈的,但是大部分是基础…

Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目录层次化索引的概念层次化索引的创建使用嵌套列表的方式构造层次化索引对象Series对象DataFrame对象通过MultiIndex类的方法构建层次化索引通过from_tuples()方法创建MultiIndex对象通过from_arrays()方法创建MultiIndex对象通过from_product()方法创建MultiIndex对象层次…

《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

我摊牌了,这篇文章,值得99%的人收藏 此文后续会改为粉丝可见,所以喜欢的请提前关注和收藏,不迷路。 最近有五本我喜欢的redis实体新书,想要的去评论,我写个随机数抽奖包邮送给你。 那么,准备好…

Python数据预处理之异常值的处理——【自定义的three_sigma()函数、boxplot()方法】

文章目录基于3σ原则检测异常值代码实现测试基于箱型图检测异常值异常值的处理基于3σ原则检测异常值 3σ原则,又称拉依达准则。是指假设一组检测数据只含有随机误差。对其进行计算处理得到标准偏差,按一定概率确定一个区间,凡是超过这个区间…

那个谷歌的网红扔鸡蛋的题,来看看教科书式的回答

leetcode顶级难题,谷歌面试天天问,来看看吧,带你来一步一步达到最优解。 谷歌不知道问了多少遍,蓝桥杯也出现过,leetcode上是顶级难题,到底是什么题能如此频繁地出现?我们一探究竟吧。 原题描述…

Python更改数据类型——astype()方法和to_numeric()函数

文章目录明确指定数据的类型通过dtypes属性进行查看创建Pandas对象指定数据类型转换数据类型通过astype()方法强制转换数据的类型通过to_numeric()函数转换数据类型明确指定数据的类型 通过dtypes属性进行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不骗你,没读这一篇,你不可能懂二分

上篇文章讲动态规划获得了80k浏览,这次的二分也值得你们一看,这个系列是特别用心写的,准备出书的哦 动态规划 3.0 引子 图书馆自习的时候,一女生背着一堆书进阅览室,结果警报响了,大妈让女生看是哪本书把警报弄响了,女生把书倒出…

Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】

文章目录轴向堆叠数据——concat()函数横向堆叠与外连接纵向堆叠与内连接主键合并数据——merge()函数内连接方式外连接方式左连接方式右连接方式其他根据行索引合并数据——join()方法四种连接方式行索引与列索引重叠合并重叠数据——combine_first()方法轴向堆叠数据——conc…

超硬核!操作系统学霸笔记,考试复习面试全靠它

之后会发布基于基础知识的大部分算法的模拟代码合集,敬请关注。 进程基础 进程的基本概念 程序顺序执行的特征: 1)顺序性:处理机严格按照程序所规定的顺序执行,每一步操作必须在下一步操作开始前执行 2)封…

配置tomcat6.0的HTTPS(单向)

利用JDK自带的产生证书的工具 生成证书 建立一个脚本文件,内容如下: set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之数据重塑——【stack()方法和unstack()方法、pivot()方法】

文章目录重塑层次化索引对于单层索引的DataFrame类对象stack()方法unstack()方法对于多层索引的DataFrame类对象辨析操作内层索引与外层索引的区别查看多层索引对象转换后的类型轴向旋转——pivot()方法重塑层次化索引 Pandas中重塑层次化索引的操作主要是stack()方法和unstac…

超硬核!学霸把操作系统经典算法给敲完了!要知行合一

上期的笔记,浏览快1万了,既然关注的人很多,那就发出来承诺过的算法全模拟,希望帮到你们。 上期的操作系统学霸笔记,考试复习面试全靠它 一、模拟进程调度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之数据转换——【rename()方法、cut()函数、get_dummies()函数】

文章目录重命名轴索引离散化连续数据哑变量处理类别型数据重命名轴索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…

超硬核!数据结构学霸笔记,考试面试吹牛就靠它

上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。 超硬核!操作系统学霸笔记,考试复习面试全靠它 第一次笔记(复习c,课程概述&#xff…

Python之数据拆分——groupby()方法

文章目录groupby()方法通过列名进行分组通过Series对象进行分组Series对象与原数据的行索引长度相等Series对象与原数据的行索引长度不等通过字典进行分组按照columns轴的方向进行分组按照index轴的方向进行分组通过函数进行分组groupby()方法 groupby( self, byNone, axis0, l…

超硬核!小白读了这篇文章,就能在算法圈混了

作为一只超级硬核的兔子,从来不给你说废话,只有最有用的干货!这些神级算法送给你 目录 第一节 1.1bogo排序 1.2位运算 1.3打擂台 1.4morris遍历 第二节 2.1睡眠排序 2.2会死的兔子 2.3矩阵快速幂 2.4摔手机/摔鸡蛋 时空复杂度目录 …

Python之数据聚合——aggregate()方法

文章目录使用内置统计方法聚合数据面向列的聚合方法aggregate()方法对每一列数据应用同一个函数对某列数据应用不同的函数对不同列数据应用不同函数使用内置统计方法聚合数据 实现数据拆分成组并分别计算平均数的操作 代码: import pandas as pd import numpy as…

超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的

本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧? 当然如果落下什么了欢迎大家评论指出 目录 顺序存储线性表实现 单链表不带头标准c语言实现 单链表不带头压缩c语言实现 约瑟…