69_Pandas.DataFrame获取行号和列号

69_Pandas.DataFrame获取行号和列号

将讲解如何从pandas.DataFrame的行名和列名中获取行号和列号,以及如何从列元素的值中获取行名和行号。
下面对内容进行说明。

  • 根据行名和列名获取行号和列号
    • get_loc() 方法
      • 当行名和列名重复时
    • 列表索引、列
  • 从列元素值获取行名称和行号

如果想从行号或列号中获取行、列或元素的值,请参考下面的文章。

  • 04_Pandas获取和修改任意位置的值(at,iat,loc,iloc)
  • 28_Pandas通过index选择并获取行和列

以下面的 pandas.DataFrame 为例。

import pandas as pddf = pd.read_csv('data/sample_pandas_normal.csv', index_col=0)print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

根据行名和列名获取行号和列号

get_loc() 方法

有一个名为 get_loc() 的方法用于获取 pandas.DataFrame 的索引和列。

如果指定行名或列名作为参数,则将返回行号和列号。行号和列号都是从0开始的整数。 行号是从索引中获取的。

print(df.index.get_loc('Alice'))
# 0print(df.index.get_loc('Ellen'))
# 4

列号是从列中获得的。

print(df.columns.get_loc('age'))
# 0print(df.columns.get_loc('point'))
# 2

无论哪种情况,对于不存在的名称都会发生 KeyError 错误。

# print(df.index.get_loc('XXX'))
# KeyError: 'XXX'# print(df.columns.get_loc('XXX'))
# KeyError: 'XXX'

当行名和列名重复时

如果行名或列名重复,请小心。以下示例使用重复的行名称,但这同样适用于列名称。 使用 rename() 方法更改行名称并准备重复的行名称。

  • 01_Pandas.DataFrame的行名和列名的修改
df_dup = df.rename(index={'Charlie': 'Bob'})
print(df_dup)
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Bob     18    CA     70
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

在这种情况下,get_loc()方法返回一个切片类型对象而不是行号。

print(df_dup.index.get_loc('Bob'))
# slice(1, 3, None)print(type(df_dup.index.get_loc('Bob')))
# <class 'slice'>

添加更多重复的行名称。

df_dup.rename(index={'Ellen': 'Bob'}, inplace=True)
print(df_dup)
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Bob     18    CA     70
# Dave    68    TX     70
# Bob     24    CA     88
# Frank   30    NY     57

如果无法用切片表示,则它将是 bool 类型的 NumPy 数组 numpy.ndarray。

print(df_dup.index.get_loc('Bob'))
# [False  True  True False  True False]print(type(df_dup.index.get_loc('Bob')))
# <class 'numpy.ndarray'>

slice 对象和 bool 类型数组都可以用于索引引用和 iloc 定位。 bool 类型数组也可以与 loc 一起使用。

  • 04_Pandas获取和修改任意位置的值(at,iat,loc,iloc)
  • 28_Pandas通过index选择并获取行和列
print(df_dup[df_dup.index.get_loc('Bob')])
#       age state  point
# name                  
# Bob    42    CA     92
# Bob    18    CA     70
# Bob    24    CA     88print(df_dup.iloc[df_dup.index.get_loc('Bob'), 0])
# name
# Bob    42
# Bob    18
# Bob    24
# Name: age, dtype: int64

注意,对于索引,可以使用query()方法提取元素,而不需要使用get_loc()获取切片对象或bool类型数组。

print(df_dup.query('index == "Bob"'))
#       age state  point
# name                  
# Bob    42    CA     92
# Bob    18    CA     70
# Bob    24    CA     88

即使行名和列名重复,如果您想要获取行号和列号而不是切片对象或 bool 类型数组,请按如下所述列出索引和列。

列表索引、列

索引和列可以使用list()转换为标准Python列表(列表类型对象)。

l_index = list(df.index)
print(l_index)
# ['Alice', 'Bob', 'Charlie', 'Dave', 'Ellen', 'Frank']print(type(l_index))
# <class 'list'>l_columns = list(df.columns)
print(l_columns)
# ['age', 'state', 'point']print(type(l_columns))
# <class 'list'>

可以使用列表的 index() 方法获取索引(元素数量)。

print(l_index.index('Bob'))
# 1

如果行名称重复,您可以使用内置函数 enumerate() 和列表理解来获取索引列表。

l_index_dup = list(df_dup.index)
print(l_index_dup)
# ['Alice', 'Bob', 'Bob', 'Dave', 'Bob', 'Frank']print([i for i, x in enumerate(l_index_dup) if x == 'Bob'])
# [1, 2, 4]

从列元素值获取行名称和行号

我们不会从行名和列名中获取行号和列号,而是向您展示如何从任意列的元素中获取相应的行名和行号。 继续使用下面的 pandas.DataFrame 作为示例。

print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

可以使用 query() 方法根据任何列中元素的条件提取行。返回值是pandas.DataFrame。

print(df.query('state == "CA"'))
#          age state  point
# name                     
# Bob       42    CA     92
# Charlie   18    CA     70
# Ellen     24    CA     88

通过列出使用 query() 提取的 pandas.DataFrame 的索引,可以获得特定值的行名称列表。

print(list(df.query('state == "CA"').index))
# ['Bob', 'Charlie', 'Ellen']

如果仅提取一行,则同样适用。如果您想要行名称值而不是列表,只需获取索引的第一个元素 [0] 即可。

print(df.query('state == "TX"'))
#       age state  point
# name                  
# Dave   68    TX     70print(list(df.query('state == "TX"').index))
# ['Dave']print(df.query('state == "TX"').index[0])
# Dave

如果想获取行号而不是行名,请使用reset_index()将索引重置为从0开始的连续数字,然后执行相同的过程。

  • 21_Pandas.DataFrame,重置Series的索引index(reset_index)
print(df.reset_index())
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57print(list(df.reset_index().query('state == "CA"').index))
# [1, 2, 4]print(list(df.reset_index().query('state == "TX"').index))
# [3]print(df.reset_index().query('state == "TX"').index[0])
# 3

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

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

相关文章

深入理解 Flink(八)Flink Task 部署初始化和启动详解

JobMaster 部署 Task 核心入口&#xff1a; JobMaster.onStart();部署 Task 链条&#xff1a;JobMaster --> DefaultScheduler --> SchedulingStrategy --> ExecutionVertex --> Execution --> RPC请求 --> TaskExecutor TaskExecutor 处理 JobMaster 的 …

Few-shot Learning:知识点

目标&#xff1a; 让机器自己学会学习&#xff0c;学会理解和判断事物的异同&#xff08;如&#xff0c;区分两张图片内是相同的东西还是不同的东西&#xff0c;不是识别出是什么东西&#xff09; Pretraining 前景知识 C o s i n e S i m i l a r i t y Cosine \ Similarity…

❤ Uniapp使用二 ( 日常使用篇)

❤ Uniapp使用二 ( 日常使用篇) 一、表单 1、基础表单验证 form <form submit"formSubmit" reset"formReset"> <view class"uni-form-item uni-column"><view class"title">请选择类型{{selectvalue}}</view&…

Pandas实战100例 | 案例 63: 使用索引合并数据

案例 63: 使用索引合并数据 知识点讲解 在 Pandas 中&#xff0c;除了按列合并数据外&#xff0c;还可以使用 DataFrame 的索引进行合并。这在索引具有特定意义时特别有用。 使用索引合并: 通过指定 left_indexTrue 和 right_indexTrue&#xff0c;可以基于 DataFrame 的索引…

Go语言中的HTTP请求发送

在Go语言中&#xff0c;发送HTTP请求是一种常见的网络操作。Go语言的net/http包提供了强大的API&#xff0c;使开发者能够轻松地构建HTTP请求并处理响应。 下面我们将详细介绍如何使用Go语言发送HTTP请求&#xff0c;包括设置请求参数、处理响应状态码和头部信息、发送JSON数据…

2024年,如何更好地守护智能网联汽车出海网络安全与隐私安全?

近年来全球各国陆续出台了很多网络安全与数据合规相关的法律法规&#xff0c;如欧盟的《通用数据保护准则GDPR》、美国的《加州消费者信息保护法CCPA》、新加坡的《隐私数据保护法PDPA》等。在国内全国人大发布了《网络安全法》、《数据安全法》、《个人信息保护法》法律&#…

poi解析word取参数方法${参数名}获取参数异常处理(2024-01-12)

poi 读取word模板&#xff0c;确保 ${参数名} 在一个XWPFRun XWPFDocument读取word模板&#xff0c;经常遇到 ${参数名} 没有被识别在一个XWPFRun中&#xff0c;导致参数解析异常如法实现参数替换。 这里只是介绍word模板参数解析问题&#xff0c;让word格式如何转换为可以正常…

【MATLAB随笔】遗传算法优化的BP神经网络(随笔,不是很详细)

文章目录 一、算法思想1.1 BP神经网络1.2 遗传算法1.3 遗传算法优化的BP神经网络 二、代码解读2.1 数据预处理2.2 GABP2.3 部分函数说明 一、算法思想 1.1 BP神经网络 BP神经网络&#xff08;Backpropagation Neural Network&#xff0c;反向传播神经网络&#xff09;是一种监…

解析HTTP响应的JSON数据

解析HTTP响应的JSON数据是许多Web开发任务中的常见需求。在Go语言中&#xff0c;可以使用标准库中的encoding/json包来轻松解析JSON数据。下面我将详细介绍如何解析HTTP响应的JSON数据。 首先&#xff0c;确保你已经发送了一个HTTP请求并获取到了响应。然后&#xff0c;你可以…

智能管理护航制造企业安全生产:信息化升级解决方案解析-亿发

安全生产信息化是通过充分利用信息技术&#xff0c;及时采集安全生产管理中的各种要素和数据&#xff0c;并进行统计分析&#xff0c;随后将分析结果及时反馈&#xff0c;以实现对安全生产管理的指导和帮助&#xff0c;旨在提高安全生产管理的效能。 在提升安全生产管理水平方…

达摩研究院Paraformer语音识别-中文-通用-16k

原文&#xff1a;https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/readme_cn.md FunASR软件包路线图 English Version&#xff08;docs&#xff09; FunASR是由阿里巴巴通义实验室语音团队开源的一款语音识别基础框架&#xff0c;集成了语音端点检测、语…

Vue面试之生命周期(上篇)

Vue面试之生命周期(上篇) 创建阶段beforeCreatecreated挂载阶段beforeMountmounted更新阶段beforeUpdateupdated销毁阶段beforeDestroydestroyed补充说明activated

AI编程可视化Java项目拆解第二弹,AI辅助生成方法流程图

之前分享过一篇使用 AI 可视化 Java 项目的文章&#xff0c;同步在 AI 破局星球、知乎、掘金等地方都分享了。 原文在这里AI 编程&#xff1a;可视化 Java 项目 有很多人感兴趣&#xff0c;我打算写一个系列文章拆解这个项目&#xff0c;大家多多点赞支持~ 今天分享的是第二…

鸿蒙开发-UI-布局-层叠布局

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 文章目录 前言 一、基本概念 二、对齐方式 三、Z序控制 四、使用场景 总结 前言 上文详细学习了线性布局&#xff0c;学习了线性容器内子元素在主轴以及交叉轴上的排列方式&#xff0c;子元素自适应相关的知识点&#xff0c;本文继…

KY59 神奇的口袋

01背包确定方案数量&#xff08;板子&#xff09; ti #include<bits/stdc.h>using namespace std;int n; int a[25]; int dp[45][45];int main(){cin>>n;for(int i 1; i < n; i ){cin>>a[i];}//注意前i个物品凑体积为0的方案数都为1 for(int i 0; i &l…

旧路由重置新路由设置新路由设置教程|适用于自动获取IP模式

前言 如果你的光猫是直接拨号&#xff08;路由模式&#xff09;的&#xff0c;就可以按照本教程进行路由重置或者更换新路由器。 本文章适合电脑小白&#xff0c;请注意每一步哦&#xff01; 注意事项 开始之前需要确认光猫是桥接模式还是路由模式。如果光猫是路由模式&…

揭秘高生产力设计工具!15款原型设计软件推荐大公开!

1、Proto.io Proto.io是一个特殊的手机原型开发平台——可以构建和部署全交互式移动程序的原型&#xff0c;并可以模拟类似的成品。它可以在大多数浏览器中运行&#xff0c;并提供三个重要的界面&#xff1a;dashboard、编辑器和播放器。 dashboard可以用来管理项目。编辑器是…

KMP的应用:Python和Go实现

kmp的作用 找到text中模式pattern的出现的pos 时间复杂度o(m n) Python实现 def kmp(self, text: str, pattern: str) -> List[int]:m len(pattern)pi [0] * mc 0for i in range(1, m):v pattern[i]while c and pattern[c] ! v:c pi[c - 1]if pattern[c] v:c 1pi[…

第二证券:利空因素影响成本端 豆粕期现价偏弱运行

上个买卖周&#xff0c;受利空要素影响&#xff0c;内盘豆粕期价刷新2021年12月14日以来收盘价新低。到上周五收盘&#xff0c;豆粕主力合约MO2405最低下探至3075元/吨&#xff0c;收报3078元/吨&#xff0c;周内累计跌幅近4%。业内人士以为&#xff0c;美国农业部超预期调高20…

Simon算法详解

0.0 Intro 相关的算法&#xff1a; Deutsh-Jozsa算法&#xff1a; 第一个量子算法对经典算法取得指数级加速的算法 美中不足在于只能确定函数是平衡的还是非平衡的&#xff0c;无法确定函数具体的内容&#xff0c;即无法直接解出函数 Bernstein-Vazirani算法&#xff…