【Python】pandas:替换值、添加行/列,删除行/列,更改形状(含数据透视表)

 pandas是Python的扩展库(第三方库),为Python编程语言提供 高性能、易于使用的数据结构和数据分析工具。

pandas官方文档:User Guide — pandas 2.2.2 documentation (pydata.org)

帮助:可使用help(...)查看函数说明文档(若是第三方库的函数,需先导入库)。例如:help(pd.DataFrame),help(pd.concat)


Python代码中,导入pandas:

import pandas as pd


1、替换值:replace, where, mask

(1-1)替换指定数据:replace

replace(self, to_replace=None, value=<no_default>, inplace: 'bool' = False, limit=None, regex: 'bool' = False, method: 'str | lib.NoDefault' = <no_default>)

注:默认inplace=False 不替换原DataFrame。

  • DataFrame.replace(旧值, 新值):将旧值都替换成新值。旧值和新值都可以是单个数据、列表、字典。
  • DataFrame.replace(旧值, 新值,limit=替换个数):将指定个数的旧值替换成新值。旧值和新值都可以是单个数据、列表、字典。
  • 注:若旧值新值都是列表,则列表长度相同,旧值新值一一对应。

  •  DataFrame.replace(正则表达式, 新值, regex=True):将正则表达式匹配的数据替换成新值。
  •  DataFrame.replace(regex=正则表达式, value=新值):将正则表达式匹配的数据替换成新值。
  • 注:正则表达式只能匹配字符串,对数值不适用,除非数值是字符串类型。

  • DataFrame.replace(np.nan, 新值):将NaN值都替换成新值。

  • DataFrame.replace(旧值, np.nan):将旧值都替换成NaN值。

  • 注:np.nan需导入numpy(import numpy as np)。

(1-2)替换布尔为False的值:where

where(self, cond, other=<no_default>, inplace=False, axis=None, level=None, errors='raise', try_cast=<no_default>)

注:默认不满足条件(False)替换为NaN,inplace=False 不替换原DataFrame。

  • DataFrame.where(条件):DataFrame中每个元素,判断是否满足条件,若满足条件则为原数据,若不满足条件则默认替换为NaN。
  • DataFrame.where(条件, 指定值):DataFrame中每个元素,判断是否满足条件,若满足条件则为原数据,若不满足条件则替换为指定值。
  • 注:df1.where(条件, df2) 等同于 np.where(条件, df1, df2),np.where需导入numpy(import numpy as np)。

  • DataFrame.where(Series, 指定值):Series中元素都是布尔(True/False),DataFrame中每个元素,根据Series,若True则为原数据,若False则替换为指定值。若DataFrame行数大于Series元素数量,Seires没有对应的布尔,则默认为False。
  • DataFrame.where(列表, 指定值):列表(底层是数组)中元素都是布尔(True/False),DataFrame中每个元素,根据列表,若True则为原数据,若False则替换为指定值。数组形状必须和DataFrame形状相同,否则报错:ValueError: Array conditional must be same shape as self。

(1-3)替换布尔为True的值:mask

mask(self, cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=<no_default>)

注:默认other=nan 满足条件(True)替换为NaN,inplace=False 不替换原DataFrame。

  • DataFrame.where(...)与DataFrame.mask(...)相反。
  • DataFrame.mask(条件):DataFrame中每个元素,若满足条件(True)则替换为指定值(默认替换成NaN),不满足条件(False)则为原数据。


 2、添加行/列:[ ] , insert, loc, concat

(2-1)添加列(最右侧):[ ]

  • DataFrame[新列名] = 数值:在最右侧添加一列,若数值为单个数据,则整列都为指定数值。新列数值也可以是其他列的计算结果。
  • 注:若列名为已有列名,则相当于修改该列数据。

 (2-2)添加列(指定位置):insert

insert(self, loc: 'int', column: 'Hashable', value: 'Scalar | AnyArrayLike', allow_duplicates: 'bool' = False) -> 'None'

  • DataFrame.insert(添加位置, 新列名, 列数值):在指定位置添加一列,列索引位置从0开始。列名不能和已有列名重复。
  • DataFrame.insert(添加位置, 新列名, 列数值, allow_duplicates=True):在指定位置添加一列,列索引位置从0开始。列名允许和已有列名重复。
  • 注:若列数值是Series,且Series有自己的索引,则列数值是DataFrame索引和Series索引共同对应的数据,没有为NaN。

(2-3)添加行/列(在最后):loc

  • DataFrame.loc[新索引标签] = 数值:在最后添加一行。数值若为单个数据,则整行都是该数据。数值也可以是其他行的计算结果。
  • DataFrame.loc[:, 新列名] = 数值:在最后(最右侧)添加一列。数值若为单个数据,则整列都是该数据。
  • DataFrame.loc[索引标签, 新列名] = 数值:查询/修改指定行列标签对应的数据时,若没有对应的列名,则在最右侧添加该列。
  • 注:若添加行时,索引标签已存在,则修改该行数据。若添加行时,列名已存在,则修改该列数据。

(2-4) 添加行/列(指定位置):concat

concat(objs: 'Iterable[NDFrame] | Mapping[Hashable, NDFrame]', axis: 'Axis' = 0, join: 'str' = 'outer', ignore_index: 'bool' = False, keys=None, levels=None, names=None, verify_integrity: 'bool' = False, sort: 'bool' = False, copy: 'bool' = True) -> 'DataFrame | Series'

注:默认join='outer' 外连接。

  • pd.concat(列表形式):使用列表形式表示需连接的对象,默认按列名从尾部添加,默认使用原索引。
  • pd.concat(列表形式, axis=1):使用列表形式表示需连接的对象,按索引横向添加列,使用原列名。

注意:

  • 指定位置添加行/列,或者添加多行/多列(例如:另一个DataFrame),可用concat将各部分拼接。concat可以与loc或iloc配合使用。
  • 若添加的行数据是Series,需将Series转为DataFrame,且行列转置,才能达到需要的拼接效果。例如:Series.to_frame().T。
  • 添加列,即横向拼接列,需设置axis=1。

补充:两DataFrame合并,可参考:"合并"中的join, merge, append, concat。【Python】pandas:排序、重复值、缺省值处理、合并、分组-CSDN博客


3、删除行/列:pop, drop, concat

(3-1)删除列:pop

pop(self, item: 'Hashable') -> 'Series'

  • DataFrame.pop(列名):删除一列,并输出删除的列。
  • 注:pop 直接在原DataFrame删除。一次只能删除一列。

(3-2)删除行/列(指定标签):drop

drop(self, labels=None, axis: 'Axis' = 0, index=None, columns=None, level: 'Level | None' = None, inplace: 'bool' = False, errors: 'str' = 'raise')

注:默认inplace=False 不替换原DataFrame。

  • DataFrame.drop(列名, axis=1):删除指定列(多列,可用列表表示)。
  • DataFrame.drop(columns=列名):删除指定列(多列,可用列表表示)。
  • DataFrame.drop(columns=列名,inplace=True):删除指定列(多列,可用列表表示),并替换原DataFrame。
  • DataFrame.drop(索引):删除指定行(多行,可用列表表示)。
  • DataFrame.drop(index=索引):删除指定行(多行,可用列表表示)。
  • DataFrame.drop(index=索引, columns=列名):删除指定行指定列(多行或多列,都可用列表表示)。

 drop也可用于删除多索引中的行/列。

  • DataFrame.drop(索引):多索引,默认行索引中删除第一列中指定索引对应的所有行。若用列表表示,则删除多个指定索引对应的所有行。
  • DataFrame.drop(index=索引):多索引,默认行索引中删除第一列中指定索引对应的所有行。若用列表表示,则删除多个指定索引对应的所有行。若用元组表示,则行索引中删除元组对应的索引的所有行。
  • DataFrame.drop(index=索引, columns=列名):删除指定索引对应的所有行以及删除指定列(多行或多列,都可用列表表示)。

(3-3)删除行/列(指定位置):concat

  • 删除指定位置的行/列,可用 loc 或者 iloc切割,再用concat拼接。
  • 注:若切割出的是一行数据(结果是Series),需将Series转为DataFrame,且行列转置,才能达到需要的拼接效果。例如:df.iloc[0].to_frame().T。若一列数据则可直接拼接。

若有重复列名的DataFrame,删除指定行/列,需用iloc通过列索引位置切割,再用concat拼接。简单的,使用iloc就可以获得。


4、更改形状(含数据透视表)

 (4-1)不带聚合的数据透视:pivot

pivot(self, index=None, columns=None, values=None) -> 'DataFrame'

  • DataFrame.pivot(作为行索引的列名, 作为列索引的列名, 显示数据的列名):指定某列或多列(列表形式)作为行索引,指定某列或多列(列表形式)作为列索引,指定某列或多列(列表形式)作为数据。
  • 类似于Excel中的数据透视表,但是是不带聚合的透视。

若作为行索引和列索引的条目有重复的,则会报错:ValueError: Index contains duplicate entries, cannot reshape。

(4-2)数据透视表:pivot_table

pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True) -> 'DataFrame'

注:默认dropna=True 若整行都是NaN则删除。

  • pd.pivot_table(DataFrame, values=数据列, index=作为行索引的列,aggfunc=聚合方式):用某列或多列(列表)指定行索引,将指定数据列(用列表表示多列)按指定聚合方式(用字典表示多列各自聚合方式)处理。
  • pd.pivot_table(DataFrame, values=数据列, index=作为行索引的列, columns=作为列索引的列,aggfunc=聚合方式, fill_value=指定值):用某列或多列(列表)指定行索引,用某列或多列(列表)指定列索引,将指定数据列(用列表表示多列)按指定聚合方式(用字典表示多列各自聚合方式)处理,NaN值用指定值填充。

(4-3)取消透视:melt

melt(self, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level: 'Level | None' = None, ignore_index: 'bool' = True) -> 'DataFrame'

  • DataFrame.melt(id_vars=[ 指定列 ], value_vars=[ 指定列 ]):参数id_vars指定作为标识符变量的列,参数value_vars指定取消透视的列。结果:一列数据为标识符变量,一列数据为取消透视的各列名(默认列名为variable),一列数据为对应的数值(默认列名为value)。
  • DataFrame.melt(id_vars=[ 指定列 ], value_vars=[ 指定列 ], var_name=新列名, value_name=新列名):参数id_vars指定作为标识符变量的列,参数value_vars指定取消透视的列,参数var_name给结果中的variable列重新取名,参数value_name给结果中的value列重新取名。
  • DataFrame.melt(id_vars=[ 指定列 ], value_vars=[ 指定列 ], ignore_index=False):参数id_vars指定作为标识符变量的列,参数value_vars指定取消透视的列。使用原索引。

多索引使用melt,指定level行的列名不能相同。

可以使用元组形式表示具体列。

(4-4)将列索引转为行索引:stack

stack(self, level: 'Level' = -1, dropna: 'bool' = True)

注:默认level= -1 将最后一行列索引转为行索引,dropna=True 若整行都是NaN则删除。

  • DataFrame.stack( ): 将最后一行列索引转为行索引。
  • DataFrame.stack(level=指定列索引): 多索引中,指定列索引转为行索引。从上往下level从0开始,最后一个也是-1。可用列表形式表示将多级列索引转为行索引。
  • DataFrame.stack(dropna=False): 将最后一行列索引转为行索引。整行数据都是NaN的也保留。

(4-5)将行索引转为列索引:unstack

unstack(self, level: 'Level' = -1, fill_value=None)

注:默认level= -1 将最后一列行索引转为列索引。

  • DataFrame.unstack( ): 将最后一列行索引转为列索引。
  • DataFrame.unstack(level=指定列索引): 多索引中,指定行索引转为列索引。从左往右level从0开始,最后一个也是-1。可用列表形式表示将多级行索引转为列索引。


(4-6)行轴、列轴交换:(行列转置)

  • DataFrame.swapaxes(0,1):行列转置。
  • DataFrame.transpose( ):行列转置。
  • DataFrame.T:行列转置。


pandas 各函数官方文档:General functions — pandas 2.2.2 documentation (pydata.org)

DataFrame 各方法官方文档:DataFrame — pandas 2.2.2 documentation (pydata.org)

Series 各方法官方文档:Series — pandas 2.2.2 documentation (pydata.org)

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

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

相关文章

前端面试宝典【HTML篇】【4】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…

【区块链+绿色低碳】山东邹平:区块链生态环境监管平台 | FISCO BCOS应用案例

山东省滨州市生态环境局邹平分局通过实地考察和调研发现&#xff0c;执法大队在执法工作中存在各排污企业设备系统无 法互通、终端采集数据固证难且可信度低、环境执法电子证据采集规则与司法采信标准不统一等痛点。而区块链 的分布式记账、不易篡改性和智能合约自动执行机制&a…

【源码+文档+调试讲解】学生党务学习系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统大学生党务学习平台信息管理难度大&#xff0c;容错率低&…

前端技术回顾系列 14 | 总结 + Vue 3.x 必修课

欢迎关注公众号&#xff1a;CodeFit 创作不易&#xff0c;如果你觉得这篇文章对您有帮助&#xff0c;请不要忘了 点赞、分享 和 关注&#xff0c;为我的 持续创作 提供 动力&#xff01; 1. 回顾系列的初衷和目标 在六月初&#xff0c;我开始编写 「前端技术回顾系列 2024」&a…

C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项

1.构造函数的分类及调用: 2.两种分类方式: 按参数分为: 有参构造和无参构造 按类型分为:有参构造和无参构造 3.三种调用方式: 括号法 显示法 隐式转换法 2.调用方法代码演示 1.括号法代码演示&#xff1a; #include<iostream>using namespace std;//1.构造函数的分类和…

8、springboot3 vue3开发平台-后端-使用aop 添加系统访问日志

1. 添加依赖&#xff0c; 创建数据库 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- IP地址解析 --><dependency><groupId>org.lionsou…

1000W长连接,如何建立和维护?千万用户IM 架构设计

1000W长连接&#xff0c;如何建立和维护&#xff1f;千万用户IM 架构设计 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的架构类/设计类…

【Vulnhub靶场AI-WEB-1.0打靶教程】

第一步&#xff1a;查看虚拟机的ip 第二步&#xff1a;扫描ip下开放的80端口 第三步&#xff1a;扫描查到的ip地址下的目录 第四步&#xff1a;访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步&#xff1a;打开kali终端&#xff0c;使用sqlmap功能 sq…

YOLO:训练自己的样本数据集进行目标检测

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何使用python语言和 ultralytics 库训练自己的数据集&#xff0c;并进行 YOLO 目标检测模型训练和推理的代码。 文章目录 一、样本数据集准备1.1 标注工具1.2 数据集格式1.2.1 图片和标签数据集制作1.2.2 data.yaml制作 二、模型训…

canvas根据图片生成粒子动画

canvas根据图片生成粒子动画 效果展示&#xff1a; canvas根据图片生成粒子动画效果 注意&#xff1a; js和css的引入 id&#xff1a; cartoonDot-img对应的是被 拷贝的图像&#xff0c;后期要替换的 粒子图像就在这 min.js 地址 HTML代码块 <!DOCTYPE html> <h…

系统架构师考点--系统架构设计(中)

大家好。今天继续总结一下系统架构设计的一些考点。 一、软件架构复用 软件产品线是指一组软件密集型系统&#xff0c;它们共享一个公共的、可管理的特性集&#xff0c;满足某个特定市场或任务的具体需要&#xff0c;是以规定的方式用公共的核心资产集成开发出来的。即围绕核…

SpringBoot 日志:从基础到高级的全面指南

&#x1f4da; SpringBoot 日志&#xff1a;从基础到高级的全面指南 &#x1f50d; &#x1f4da; SpringBoot 日志&#xff1a;从基础到高级的全面指南 &#x1f50d;摘要引言正文内容一、日志概述 &#x1f4dc;二、日志使用 &#x1f4dd;2.1 打印日志 &#x1f4e3;2.2 日志…

IIS解析漏洞~ IIS7.漏洞分析

IIS解析漏洞 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本)&#xff0c;配合文件上传漏洞进行GetShell的漏洞&#xff01; 1.2&#xff1a;IIS7.X 在IIS7.0和IIS7.5版本下也存在解析漏洞&#xff0c;在默认Fast-CGI开启状况下&#xff0c;在一个文…

DM集群的高可用的配置方式(多语言)

一、介绍 强调以下&#xff1a;dm_svc.conf必须放置到应用服务器上才行&#xff0c;放到其他服务器上识别不到。 文章中有的框架可能没写到并不代表不支持&#xff0c;有没提到的可文章下方留言。 1.dm_svc.conf的作用&#xff1a; dm_svc.conf文件主要是为了当DM数据库集群…

PHP健身微信小程序系统源码

&#x1f3cb;️‍♀️健身新潮流&#xff01;解锁“健身微信小程序”的全方位塑形秘籍 &#x1f4f1;开篇&#xff1a;掌中健身房&#xff0c;随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗&#xff1f;是时候告别这些束缚&#xff0c;拥抱“健身微信小程序”…

如何在数据埋点中发现和修复数据上报逻辑错误

如何发现和处理数据埋点中的逻辑错误 在大数据分析中,数据埋点是至关重要的一环。然而,当我们遇到数据上报逻辑错误时,该如何应对呢?本文将为你揭示解决这一棘手问题的有效方法。 目录 如何发现和处理数据埋点中的逻辑错误什么是数据上报逻辑错误?如何发现数据上报逻辑错误…

S32G3系列芯片Serial Boot功能详解!

《S32G3系列芯片——Boot详解》系列——S32G3系列芯片Serial Boot功能详解&#xff01;★★★ 一、Serial Boot模式概述二、串行下载协议2.1 基于UART和CAN的下载协议概述2.2 基于FlexCAN的Serial Boot2.2.1 IO配置2.2.2 时钟配置2.2.3 通信波特率2.2.4 基于FlexCAN的Serial Bo…

定义和使用自己的子程序——函数的介绍

定义和使用自己的子程序——函数的介绍 1.函数基础语法1.1.基础语法1.2.例题1——距离函数题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 2.void类型3.变量作用域和参数传递3.1.局部变量和全局变量3.2.形式参数和实际参数3.3.例题2——歌唱比赛题目描述输入格式输出…

计算机基础(Windows 10+Office 2016)教程 —— 第6章 电子表格软件Excel 2016(下)

电子表格软件Excel 2016 6.4 Excel 2016的公式与函数6.4.1 公式的概念6.4.2 公式的使用6.4.3 单元格的引用6.4.4 函数的使用6.4.5 快速计算与自动求和 6.5 Excel 2016的数据管理6.5.1 数据排序6.5.2 数据筛选6.5.3 分类汇总6.5.4 分组显示6.5.5 合并计算 6.6 Excel 2016的图表6…

【RabbitMQ】通配符模式(Topics)

一、基本概念 生产者&#xff08;Producer&#xff09;&#xff1a;发送消息到RabbitMQ交换机的程序。生产者定义消息的路由键&#xff0c;用于标识消息的目的地。交换机&#xff08;Exchange&#xff09;&#xff1a;接收生产者发送的消息&#xff0c;并根据路由键和绑定规则…