DataFrame行索引操作以及重置索引

news2025/4/11 22:49:17

一.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 pd

s = {
    '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 pd

s = {
    '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 pd

s = {
    '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 pd

s = {
    '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 : 要连接的 DataFrameSeries 对象的列表或字典。

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 pd

s = {
    '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  12

   A   B
a  1   4
a  7  10

A    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.0

Empty 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   0

   A  B  C   D
a  1  4  7  10
b  2  5  8  11
c  3  6  9  12

# DataFrame 与 Series 拼接
import pandas as pd

s = {
    '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  9

     A    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 pd

s = {
    '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.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.0

        这里其实你会有一个问题,为什么series的name属性是给整条数据加一个列标签而不是通用标签呢?老实说暂时这样理解是对的,可以参考下面的看看。

        series默认是竖向的,这是为了符合dataframe按列操作的习惯,直接把series按横向连接行不通,可以先把series转成dataframe,然后dataframe.T转置,再去连接应该就可以。

# DataFrame 与 Series 拼接
import pandas as pd

s = {
    '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

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

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

相关文章

DayDreamer: World Models forPhysical Robot Learning

DayDreamer:用于物理机器人学习的世界模型 Philipp Wu* Alejandro Escontrela* Danijar Hafner* Ken Goldberg Pieter Abbeel 加州大学伯克利分校 *贡献相同 摘要:为了在复杂环境中完成任务,机器人需要从经验中学习。深度强化学习是机器人学…

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 像素的,如下图所示…

【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流​编辑 ​编辑获取&#xff1a; map的键是set集合&#xff0c;获取方法map.keySet() map的值是collection 集合&…

【网络安全实验】PKI(证书服务)配置实验

目录 一、PKI相关概念 1.1 定义与核心功能 1.2 PKI 系统的组成 1.证书颁发机构&#xff08;CA, Certificate Authority&#xff09; 2.注册机构&#xff08;RA, Registration Authority&#xff09; 3.数字证书 1.3 PKI 的功能 1.4 PKI认证体系&#xff1a; 工作流程 …

【数据集】多视图文本数据集

多视图文本数据集指的是包含多个不同类型或来源的信息的文本数据集。不同视图可以来源于不同的数据模式&#xff08;如原始文本、元数据、网络结构等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、词嵌入、主题分布等&#xff09;。这些数据集常用于多…

学透Spring Boot — 007. 七种配置方式及优先级

Spring Boot 提供很多种方式来加载配置&#xff0c;本文我们会用Tomcat的端口号作为例子&#xff0c;演示Spring Boot 常见的配置方式。 几种配置方式 使用默认配置 新建一个项目什么都不配置&#xff0c;Spring Boot会自动配置Tomcat端口号。 启动日志 TomcatWebServer :…

【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 空间…

【服务日志链路追踪】

MDCInheritableThreadLocal和spring cloud sleuth 在微服务架构中&#xff0c;日志链路追踪&#xff08;Logback Distributed Tracing&#xff09; 是一个关键需求&#xff0c;主要用于跟踪请求在不同服务间的调用链路&#xff0c;便于排查问题。常见的实现方案有两种&#x…

【行测】判断推理:图形推理

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;读不在三更五鼓&#xff0c;功只怕一曝十寒。 > 目标&#xff1a;掌握 图形推理 基本题型&#xff0c;并能运用到例题中。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! …

3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。

一、3D 模型给可视化大屏带来的创新 更直观的视觉体验 传统的可视化大屏主要以二维图表和图形的形式展示数据&#xff0c;虽然能够传达一定的信息&#xff0c;但对于复杂的场景和数据关系&#xff0c;往往难以直观地呈现。而 3D 模型可以将数据以三维立体的形式展示出来&#…

Unity HDRP管线用ShaderGraph还原Lit,方便做拓展;

里面唯一的重点就是判断有无这张复合图&#xff0c;我用的是颜色判断&#xff1a; float Tex TexCol.r*TexCol.g*TexCol.b*TexCol.a; if(Tex 1) { IsOrNot 1; } else { IsOrNot 0; } 其他的正常解码就行&#xff0c;对了法线贴图孔位记得设置成normal&#xff0c;不然的话…

绝缘升级 安全无忧 金能电力环保绝缘胶垫打造电力安全防护新标杆

在电力安全领域&#xff0c;一块看似普通的胶垫&#xff0c;却是守护工作人员生命安全的“第一道防线”。近年来&#xff0c;随着电网设备升级和环保要求趋严&#xff0c;传统绝缘胶垫有异味、易老化、绝缘性能不足等问题逐渐暴露。为此&#xff0c;金能电力凭借技术创新推出新…

Linux命令-iotop

iotop 命令 iotop 是一个用于实时监控磁盘 I/O 活动的工具&#xff0c;可以显示哪些进程正在使用磁盘资源。 参数 描述 –version 显示程序版本号并退出 -h, --help 显示此帮助消息并退出 -o, --only 仅显示实际进行 I/O 操作的进程或线程 -b, --batch 非交互模式&#xff0c;适…

QTableWidget 中insertRow(0)(头插)和 insertRow(rowCount())(尾插)的性能差异

一、目的 在 Qt 的 QTableWidget 中&#xff0c;insertRow(0) &#xff08;头插&#xff09;和 insertRow(rowCount())&#xff08;尾插&#xff09;在性能上存在显著差异。 二、QAbstractItemModel:: insertRows 原文解释 QAbstractItemModel Class | Qt Core 5.15.18 AI 解…

【万字总结】前端全方位性能优化指南(完结篇)——自适应优化系统、遗传算法调参、Service Worker智能降级方案

前言 自适应进化宣言 当监控网络精准定位病灶&#xff0c;真正的挑战浮出水面&#xff1a;系统能否像生物般自主进化&#xff1f; 五维感知——通过设备传感器实时捕获环境指纹&#xff08;如地铁隧道弱光环境自动切换省电渲染&#xff09; 基因调参——150个性能参数在遗传算…

不绕弯地解决文件编码问题,锟斤拷烫烫烫

安装python对应库 pip install chardet 检测文件编码 import chardet# 检测文件编码 file_path rC:\Users\AA\Desktop\log.log # 这里放文件和文件绝对路径 with open(file_path, rb) as f:raw_data f.read(100000) # 读取前10000个字节result chardet.detect(raw_data)e…