DataFrame行索引操作以及重置索引
一.DataFrame行索引操作
1.1 获取数据
1.1.1 loc 选取数据
df.loc[ ] 只能使用标签索引,不能使用整数索引。
当通过标签索引的切片方式来筛选数据时,它的取值前闭后闭。
传参:
1.如果选择单行或单列,返回的数据类型为 Series
2.选择多行或多列,返回的数据类型为 DataFrame
3.选择单个元素(某行某列对应的值),返回的数据类型为该元素的原始数据类型(如整数、浮点数等)。
DataFrame.loc[row_indexer, column_indexer]
参数:
- row_indexer:行标签或布尔数组。
- column_indexer:列标签或布尔数组。
import pandas as pds = {'A':[1,2,3,4,5],'B':[6,7,8,9,10],'C':[11,12,13,14,15]
}df = pd.DataFrame(s,index=['a','b','c','d','e'])
# 只取一行series
print(df.loc['a'])
A 1
B 6
C 11
Name: a, dtype: int64
# 切片
print(df.loc['a' : 'd'])
A B C
a 1 6 11
b 2 7 12
c 3 8 13
d 4 9 14
# 取一个具体元素
print(df.loc['a','A'])
1
# 行列一起切片
print(df.loc['a':'d','A':'c'])# 列切片
print(df.loc[...,'A':'B'])
A B C
a 1 6 11
b 2 7 12
c 3 8 13
d 4 9 14
A B
a 1 6
b 2 7
c 3 8
d 4 9
e 5 10
1.1.2 iloc 选取数据
iloc[ ] 方法用于基于位置的索引,即通过行和列的整数位置来选择数据(这个就不用标签索引了)。
这里切片就回到左闭右开了。
DataFrame.iloc[row_indexer, column_indexer]
import pandas as pds = {'A':[1,2,3,4,5],'B':[6,7,8,9,10],'C':[11,12,13,14,15]
}df = pd.DataFrame(s,index=['a','b','c','d','e'])# 获取行
print(df.iloc[0])
A 1
B 6
C 11
Name: a, dtype: int64
# 获取列
print(df.iloc[...,0])
a 1
b 2
c 3
d 4
e 5
Name: A, dtype: int64
# 获取具体值
print(df.iloc[1,0])
2
# 切片
print(df.iloc[0:2,0:2])
A B
a 1 6
b 2 7
1.2 添加数据
1.2.1 loc方法添加新行
# 对标给列的直接赋值
import pandas as pds = {'A':[1,2,3,4,5],'B':[6,7,8,9,10],'C':[11,12,13,14,15]
}df = pd.DataFrame(s,index=['a','b','c','d','e'])
# 传标签进来
df.loc['g'] = 0
print(df)
A B C
a 1 6 11
b 2 7 12
c 3 8 13
d 4 9 14
e 5 10 15
g 0 0 0
1.2.2 iloc方法添加新行
# 对标给列的直接赋值
import pandas as pds = {'A':[1,2,3,4,5],'B':[6,7,8,9,10],'C':[11,12,13,14,15]
}df = pd.DataFrame(s)
# 注意这里是不能添加的,只能修改,即使都用默认的数字标签也不行
df.iloc[4] = 0
print(df)df.iloc[5] = 0
A B C
0 1 6 11
1 2 7 12
2 3 8 13
3 4 9 14
4 0 0 0---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Cell In[69], line 16
12 df.iloc[4] = 0
13 print(df)
---> 16 df.iloc[5] = 0~~~
~~~
~~~(此处省略)
1.2.3 concat拼接
pd.concat
(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
参数:
objs : 要连接的 DataFrame 或 Series 对象的列表或字典。
axis : 指定连接的轴,0 或 'index' 表示按行连接,1 或 'columns' 表示按列连接。
join : 指定连接方式,'outer' 表示并集(默认),'inner' 表示交集,就是是否丢弃多的列或行的意思。
how : 指定连接方式,'left' 表示左连接,'right' 表示右连接,'inner' 表示交集连接,'outer' 表示并集连接。
ignore_index : 如果为 True,则忽略所有对象中的原始索引并生成新的索引。
keys : 用于在连接结果中创建层次化索引。
levels : 指定层次化索引的级别。
names : 指定层次化索引的名称。
verify_integrity : 如果为 True,则在连接时检查是否有重复索引。
sort : 如果为 True,则在连接时对列进行排序。
copy : 如果为 True,则复制数据。
# 简单的行拼接
import pandas as pds = {'A':[1,2,3],'B':[4,5,6]
}s1 = {'A':[7,8,9],'B':[10,11,12]
}df = pd.DataFrame(s,index=['a','b','c'])
df1 = pd.DataFrame(s1,index=['a','b','c'])# 重新设置索引
print(pd.concat([df,df1],axis=0,ignore_index=True))
A B
0 1 4
1 2 5
2 3 6
3 7 10
4 8 11
5 9 12
# 不设置索引,这样在执行其他操作时容易出现异常
print(pd.concat([df,df1],axis=0))print()# 比如下面,就会打印两行,因为索引是重复的
print(pd.concat([df,df1],axis=0).loc['a'])print()# 这种情况就只好使用iloc访问元素
print(pd.concat([df,df1],axis=0).iloc[0])
A B
a 1 4
b 2 5
c 3 6
a 7 10
b 8 11
c 9 12A B
a 1 4
a 7 10A 1
B 4
Name: a, dtype: int64
- 特殊情况
刚好也来看看并集交集的用法:
import pandas as pd# 两个列标签完全不同的数据集拼接
s = {'A':[1,2,3],'B':[4,5,6]
}s1 = {'C':[7,8,9],'D':[10,11,12]
}df = pd.DataFrame(s,index=['a','b','c'])
df1 = pd.DataFrame(s1,index=['a','b','c'])# 默认并集拼接
print(pd.concat([df,df1],axis=0))print()# 交集拼接
print(pd.concat([df,df1],axis=0,join='inner'))
A B C D
a 1.0 4.0 NaN NaN
b 2.0 5.0 NaN NaN
c 3.0 6.0 NaN NaN
a NaN NaN 7.0 10.0
b NaN NaN 8.0 11.0
c NaN NaN 9.0 12.0Empty DataFrame
Columns: []
Index: [a, b, c, a, b, c]
因为两数据集列标签没有相同的,所以没有交集,所以就有了上面的输出。
# 简单列拼接
import pandas as pd# 两个列标签完全不同的数据集拼接
s = {'A':[1,2,3],'B':[4,5,6]
}s1 = {'C':[7,8,9],'D':[10,11,12]
}df = pd.DataFrame(s,index=['a','b','c'])
df1 = pd.DataFrame(s1,index=['a','b','c'])print(pd.concat([df,df1],axis=1))
A B C D
a 1 4 7 10
b 2 5 8 11
c 3 6 9 12
- 特殊情况
import pandas as pd# 两个列标签完全不同的数据集拼接
s = {'A':[1,2,3],'B':[4,5,6]
}s1 = {'C':[7,8,9,0],'D':[10,11,12,0]
}df = pd.DataFrame(s,index=['a','b','c'])
df1 = pd.DataFrame(s1,index=['a','b','c','d'])# 默认并集拼接
print(pd.concat([df,df1],axis=1))print()# 交集拼接
print(pd.concat([df,df1],axis=1,join='inner'))
A B C D
a 1.0 4.0 7 10
b 2.0 5.0 8 11
c 3.0 6.0 9 12
d NaN NaN 0 0A B C D
a 1 4 7 10
b 2 5 8 11
c 3 6 9 12
# DataFrame 与 Series 拼接
import pandas as pds = {'A':[1,2,3],'B':[4,5,6]
}
df = pd.DataFrame(s)# 这里需要填入隐藏属性name,来表示这一整条数据的列标签
serie = pd.Series([7,8,9],name='C')# 列添加
print(pd.concat([df,serie],axis=1))print()# 行添加
print(pd.concat([df,serie],axis=0))
A B C
0 1 4 7
1 2 5 8
2 3 6 9A B C
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 6.0 NaN
0 NaN NaN 7.0
1 NaN NaN 8.0
2 NaN NaN 9.0
# DataFrame 与 Series 拼接
import pandas as pds = {'A':[1,2,3],'B':[4,5,6]
}
df = pd.DataFrame(s)
serie = pd.Series([7,8],name = 'g',index = ['A','B'])# 列添加
print(pd.concat([df,serie],axis=1))print()# 行添加
print(pd.concat([df,serie],axis=0))
A B g
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 6.0 NaN
A NaN NaN 7.0
B NaN NaN 8.0A B g
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 6.0 NaN
A NaN NaN 7.0
B NaN NaN 8.0
这里其实你会有一个问题,为什么series的name属性是给整条数据加一个列标签而不是通用标签呢?老实说暂时这样理解是对的,可以参考下面的看看。
series默认是竖向的,这是为了符合dataframe按列操作的习惯,直接把series按横向连接行不通,可以先把series转成dataframe,然后dataframe.T转置,再去连接应该就可以。
# DataFrame 与 Series 拼接
import pandas as pds = {'A':[1,2,3],'B':[4,5,6]
}
df = pd.DataFrame(s)# 把s1横向拼接到s中s1 = pd.Series([7,8,9],name='a',index=['C','D','E'])df1 = pd.DataFrame(s1).T
df2 = pd.concat([df,df1],axis=0)
print(df2)
A B C D E
0 1.0 4.0 NaN NaN NaN
1 2.0 5.0 NaN NaN NaN
2 3.0 6.0 NaN NaN NaN
C NaN NaN 7.0 8.0 9.0
1.2.4 删除行
这里跟删除列一样,使用drop方法,传入要删除的行索引即可。
二.函数
2.1 常用的统计函数
| count() | 统计某个非空值的数量 |
| sum() | 求和 |
| mean() | 求均值 |
| median() | 求中位数 |
| std() | 求标准差 |
| min() | 求最小值 |
| max() | 求最大值 |
| abs() | 求绝对值 |
| prod() | 求所有数值的乘积 |
2.2 重置索引
可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。
DataFrame.reindex
(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=np.nan, limit=None, tolerance=None)
参数:
1. labels :
- 类型:数组或列表,默认为 None。
- 描述:新的索引标签。
2. index :
- 类型:数组或列表,默认为 None。
- 描述:新的行索引标签。
3. columns :
- 类型:数组或列表,默认为 None。
- 描述:新的列索引标签。
4. axis :
- 类型:整数或字符串,默认为 None。
- 描述:指定重新索引的轴。0 或 'index' 表示行,1 或 'columns' 表示列。
5. method :
- 类型:字符串,默认为 None。
- 描述:用于填充缺失值的方法。可选值包括 'ffill'(前向填充)、'bfill'(后向填充)等。
6. copy:
- 类型:布尔值,默认为 True。
- 描述:是否返回新的 DataFrame 或 Series。
7. level:
- 类型:整数或级别名称,默认为 None。
- 描述:用于多级索引(MultiIndex),指定要重新索引的级别。
8. fill_value :
- 类型:标量,默认为 np.nan。
- 描述:用于填充缺失值的值。
9. limit:
- 类型:整数,默认为 None。
- 描述:指定连续填充的最大数量。
10. tolerance:
- 类型:标量或字典,默认为 None。
- 描述:指定重新索引时的容差。
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])# 重新索引行
new_index = ['a', 'b', 'c', 'd']
df_reindexed = df.reindex(new_index)
print(df_reindexed)# 重新索引列
new_columns = ['A', 'B', 'C', 'D']
df_reindexed = df.reindex(columns=new_columns)
print(df_reindexed)# 重新索引行,并使用前向填充
# 新的行索引 ['a', 'b', 'c', 'd'] 包含了原索引中不存在的标签 'd',使用 method='ffill' 进行前向填充,因此 'd' 对应的行填充了前一行的值。
new_index = ['a', 'b', 'c', 'd']
df_reindexed = df.reindex(new_index, method='ffill')
print(df_reindexed)# 重新索引行,并使用指定的值填充缺失值
new_index = ['a', 'b', 'c', 'd']
df_reindexed = df.reindex(new_index, fill_value=0)
print(df_reindexed)
A B C
a 1.0 4.0 7.0
b 2.0 5.0 8.0
c 3.0 6.0 9.0
d NaN NaN NaN
A B C D
a 1 4 7 NaN
b 2 5 8 NaN
c 3 6 9 NaN
A B C
a 1 4 7
b 2 5 8
c 3 6 9
d 3 6 9
A B C
a 1 4 7
b 2 5 8
c 3 6 9
d 0 0 0
相关文章:
DataFrame行索引操作以及重置索引
一.DataFrame行索引操作 1.1 获取数据 1.1.1 loc 选取数据 df.loc[ ] 只能使用标签索引,不能使用整数索引。 当通过标签索引的切片方式来筛选数据时,它的取值前闭后闭。 传参: 1.如果选择单行或单列,返回的数据类型为 Series…...
DayDreamer: World Models forPhysical Robot Learning
DayDreamer:用于物理机器人学习的世界模型 Philipp Wu* Alejandro Escontrela* Danijar Hafner* Ken Goldberg Pieter Abbeel 加州大学伯克利分校 *贡献相同 摘要:为了在复杂环境中完成任务,机器人需要从经验中学习。深度强化学习是机器人学…...
线性欧拉筛
线性筛:高效求解素数 在数论中,素数的筛选是一个经典的问题。最常见的素数筛选方法是埃拉托斯特尼筛法,其时间复杂度为 O ( n log log n ) O(n\log \log n) O(nloglogn),非常适合求解小范围内的素数。随着问题规模的增大&…...
Flutter vs React Native:跨平台移动开发框架对比
文章目录 前言1. 框架概述什么是 Flutter?什么是 React Native? 2. 性能对比Flutter 的性能表现React Native 的性能表现总结: 3. 开发体验对比3.1 开发效率3.2 UI 组件库 4. 生态系统对比5. 适用场景分析6. 结论:如何选择&#x…...
用matlab搭建一个简单的图像分类网络
文章目录 1、数据集准备2、网络搭建3、训练网络4、测试神经网络5、进行预测6、完整代码 1、数据集准备 首先准备一个包含十个数字文件夹的DigitsData,每个数字文件夹里包含1000张对应这个数字的图片,图片的尺寸都是 28281 像素的,如下图所示…...
AI辅助开发插件
适合Java程序员的AI辅助开发插件,按功能和适用场景分类: 1. 飞算JavaAI • 特点:从需求分析到代码生成的全流程智能引导,支持Maven、Gradle等主流工具,一键生成完整工程代码,包括配置文件、源代码和测试资…...
【AI4CODE】5 Trae 锤一个基于百度Amis的Crud应用
【AI4CODE】目录 【AI4CODE】1 Trae CN 锥安装配置与迁移 【AI4CODE】2 Trae 锤一个 To-Do-List 【AI4CODE】3 Trae 锤一个贪吃蛇的小游戏 【AI4CODE】4 Trae 锤一个数据搬运工的小应用 1 百度 Amis 简介 百度 Amis 是一个低代码前端框架,由百度开源。它通过 J…...
npm webpack打包缓存 导致css引用地址未更新
问题如下: 测试环境配置: publicPath: /chat/,生产环境配置: publicPath: /,css中引用背景图片 background-image: url(/assets/images/calendar/arrow-left.png);先打包测试环境,观察打包后的css文件引用的背景图片地址 可以全…...
ollama导入huggingface下载的大模型并量化
1. 导入GGUF 类型的模型 1.1 先在huggingface 下载需要ollama部署的大模型 1.2 编写modelfile 在ollama 里面输入 ollama show --modelfile <你有的模型名称> eg: ollama show --modelfile qwen2.5:latest修改其中的from 路径为自己的模型下载路径 FROM /Users/lzx/A…...
Java 集合 Map Stream流
目录 集合遍历for each map案例 编辑 这种数组的遍历是【index】编辑map排序【对象里重写compareTo编辑map排序【匿名内部类lambda编辑 stream流编辑 编辑获取: map的键是set集合,获取方法map.keySet() map的值是collection 集合&…...
记录一下零零散散的的东西-ImageNet
ImageNet 是一个非常著名的大型图像识别数据集, 数据集基本信息 内容说明📸 图像数量超过 1400万张图片(包含各类子集)🏷️ 类别数量常用的是 ImageNet-1K(1000类)🧑Ἶ…...
【网络安全实验】PKI(证书服务)配置实验
目录 一、PKI相关概念 1.1 定义与核心功能 1.2 PKI 系统的组成 1.证书颁发机构(CA, Certificate Authority) 2.注册机构(RA, Registration Authority) 3.数字证书 1.3 PKI 的功能 1.4 PKI认证体系: 工作流程 …...
【数据集】多视图文本数据集
多视图文本数据集指的是包含多个不同类型或来源的信息的文本数据集。不同视图可以来源于不同的数据模式(如原始文本、元数据、网络结构等),或者不同的文本表示方法(如 TF-IDF、词嵌入、主题分布等)。这些数据集常用于多…...
学透Spring Boot — 007. 七种配置方式及优先级
Spring Boot 提供很多种方式来加载配置,本文我们会用Tomcat的端口号作为例子,演示Spring Boot 常见的配置方式。 几种配置方式 使用默认配置 新建一个项目什么都不配置,Spring Boot会自动配置Tomcat端口号。 启动日志 TomcatWebServer :…...
元素定位-xpath
xpath其实就是一个path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标xpath基于XML文档树状结构,是XML路径语言,用来查询xml文档中的节点。 绝对定位 从根开始找--/(根目录)/html/body/div[2]/div/form/div[5]/button缺…...
【youcans论文精读】弱监督深度检测网络(Weakly Supervised Deep Detection Networks)
欢迎关注『youcans论文精读』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans论文精读】弱监督深度检测网络 WSDDN 0. 弱监督检测的开山之作0.1 论文简介0.2 WSDNN 的步骤0.3 摘要 1. 引言2. 相关工作3. 方法3.1 预训练网络3.2 弱监督深度检测网络3.3 WSDDN训练3.4 空间…...
网络购物谨慎使用手机免密支付功能
在数字经济蓬勃发展的当下,“免密支付”成为许多人消费时的首选支付方式。 “免密支付”的存在有其合理性。在快节奏的现代生活中,时间愈发珍贵,每节省一秒都可能带来更高的效率。以日常通勤为例,上班族乘坐交通工具时,…...
Sentinel[超详细讲解]-4
🚓 主要讲解流控模式的 三种方式中的两种: 直接、链路🚀 1️⃣ 直接模式 🚎 直接模式:对资源本身进行限流,例如对某个接口进行限流,当该接口的访问频率超过设定的阈值时,直接拒绝新的…...
【服务日志链路追踪】
MDCInheritableThreadLocal和spring cloud sleuth 在微服务架构中,日志链路追踪(Logback Distributed Tracing) 是一个关键需求,主要用于跟踪请求在不同服务间的调用链路,便于排查问题。常见的实现方案有两种&#x…...
【行测】判断推理:图形推理
> 作者:დ旧言~ > 座右铭:读不在三更五鼓,功只怕一曝十寒。 > 目标:掌握 图形推理 基本题型,并能运用到例题中。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! …...
OpenCV 图形API(12)用于计算图像或矩阵的平均值函数mean()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算矩阵元素的平均值(均值)。 mean函数计算矩阵元素的平均值M,每个通道独立计算,并返回该值。 …...
Oracle触发器使用(一):DML触发器
Oracle触发器使用(一):DML触发器 DML触发器条件谓词触发器INSTEAD OF DML触发器复合DML触发器Oracle数据库中的触发器(Trigger)本质上也是PL/SQL代码,触发器可以被Enable或者Disable,但是不能像存储过程那样被直接调用执行。 触发器不能独立存在,而是定义在表、视图、…...
3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。
一、3D 模型给可视化大屏带来的创新 更直观的视觉体验 传统的可视化大屏主要以二维图表和图形的形式展示数据,虽然能够传达一定的信息,但对于复杂的场景和数据关系,往往难以直观地呈现。而 3D 模型可以将数据以三维立体的形式展示出来&#…...
Unity HDRP管线用ShaderGraph还原Lit,方便做拓展;
里面唯一的重点就是判断有无这张复合图,我用的是颜色判断: float Tex TexCol.r*TexCol.g*TexCol.b*TexCol.a; if(Tex 1) { IsOrNot 1; } else { IsOrNot 0; } 其他的正常解码就行,对了法线贴图孔位记得设置成normal,不然的话…...
绝缘升级 安全无忧 金能电力环保绝缘胶垫打造电力安全防护新标杆
在电力安全领域,一块看似普通的胶垫,却是守护工作人员生命安全的“第一道防线”。近年来,随着电网设备升级和环保要求趋严,传统绝缘胶垫有异味、易老化、绝缘性能不足等问题逐渐暴露。为此,金能电力凭借技术创新推出新…...
Linux命令-iotop
iotop 命令 iotop 是一个用于实时监控磁盘 I/O 活动的工具,可以显示哪些进程正在使用磁盘资源。 参数 描述 –version 显示程序版本号并退出 -h, --help 显示此帮助消息并退出 -o, --only 仅显示实际进行 I/O 操作的进程或线程 -b, --batch 非交互模式,适…...
记录 | Android getWindow().getDecorView().setSystemUiVisibility(...)设置状态栏属性
纯纯的一边开发一边学习,是小白是菜鸟,单纯的记录和学习,大神勿喷,理解有错望指正~ getWindow().getDecorView().setSystemUiVisibility(…) 该方法用于控制系统 UI(如状态栏、导航栏)的可见性…...
QTableWidget 中insertRow(0)(头插)和 insertRow(rowCount())(尾插)的性能差异
一、目的 在 Qt 的 QTableWidget 中,insertRow(0) (头插)和 insertRow(rowCount())(尾插)在性能上存在显著差异。 二、QAbstractItemModel:: insertRows 原文解释 QAbstractItemModel Class | Qt Core 5.15.18 AI 解…...
用nodejs连接mongodb数据库对标题和内容的全文本搜索,mogogdb对文档的全文本索引的设置以及用node-rs/jieba对标题和内容的分词
//首先我们要在Nodejs中安装 我们的分词库node-rs/jieba,这个分词不像jieba安装时会踩非常多的雷,而且一半的机率都是安装失败,node-rs/jieba比jieba库要快20-30%;安装分词库是为了更好达到搜索的效果 这个库直接npm install node-rs/jieba即…...
【万字总结】前端全方位性能优化指南(完结篇)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前言 自适应进化宣言 当监控网络精准定位病灶,真正的挑战浮出水面:系统能否像生物般自主进化? 五维感知——通过设备传感器实时捕获环境指纹(如地铁隧道弱光环境自动切换省电渲染) 基因调参——150个性能参数在遗传算…...
