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

news2024/12/26 23:39:55

 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.coloradmin.cn/o/1969750.html

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

相关文章

9.Redis的Set类型

Redis的Set结构与java中的HashSet类似。 可以看做是一个value为null的HashMap。 特点 1.无序 2.元素不可重复 3.查找快 4.支持交集、并集、差集等功能 应用场景 实现共同关注&#xff0c;共同好友。 常见命令 sadd key 元素1 元素2 给set集合添加一个或多个元素 smem…

Node.js(2)——压缩前端html

需求&#xff1a;把回车符&#xff08;\r&#xff09;和换行符&#xff08;\n&#xff09;去掉后&#xff0c;写入到新的html文件中 步骤&#xff1a; 读取源html文件内容正则替换字符串写入到新的html文件中 示例&#xff1a; 获取html文件中的内容并检查&#xff08;同时…

temu电商的选品师能当成副业做吗?

在当今充满机会的电商行业中&#xff0c;成为一名选品师是否适合作为副业呢?这是一个颇具吸引力的问题&#xff0c;特别是对于那些希望在自由职业和兼职之间寻找平衡的人群。TEMU电商平台的选品师角色&#xff0c;不仅涉及到产品的挑选&#xff0c;还包括市场研究、竞争分析以…

DevOps之Jenkins的CICD

文章目录 CI&CD架构Jenkins介绍GitLab安装SonarQube安装Harbor安装目标服务器的安装与配置Jenkins安装Jenkins集成SonarQube与targetJenkins集成Gitlab推送代码到目标服务器构建项目镜像 CI&CD架构 Jenkins介绍 Jenkins是一个独立的开源软件项目&#xff0c;是基于Java…

IIS解析漏洞~IIS6.X漏洞分析

类型代码量作用一句话木马代码量极少配合webshell管理工具使用小马代码量比小马多大马代码量最多功能比较完善&#xff08;执行命令&#xff0c;文件操作等&#xff09;图片马里面传有一句话木马 文件解析漏洞是由于中间件错误的将特殊格式的文件解析成可执行网页文件(脚本)&am…

学习记录(8):RAG and PAL and ReAct

咱就是说 习惯了做笔记 不做笔记 这知识真的是一点记不住啊&#xff08;实则是脑子笨0.o 那咱就狠狠的来记住这个知识点0.o 参考学习&#xff1a;B站GenJi是真想教会你-《【包教包会】一条视频速通AI大模型原理》 文章目录 一、RAG&#xff1a;检索增强生成二、PAL&#xff1a…

VMware Workstation 17 图文安装教程

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

红黑树的实现及测试

目录 1.红黑树的结构 2.红黑树的节点 3.红黑树的实现 1&#xff09;插入操作 1.u存在且为红 2.u不存在或存在且为黑&#xff08;且cur 为 parent 的左&#xff09; 3.u不存在或存在且为黑&#xff08;且cur 为 parent 的右&#xff09; 2&#xff09;查找操作 3&#x…

63、ELK安装和部署

一、ELK日志系统 1.1、ELK平台的定义 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将ElasticSearch、Logstash和Kiabana 三个开源工具配合使用&#xff0c;完成更强大的用户对日志的查询、排序、统计需求 E:elasticsearch ES分布式索引型非关系数据库&#xff0c;存…

Mybatis学习(2)

分页 目的&#xff1a;减少数据的处理量 方式一&#xff1a;使用limit实现分页&#xff0c;核心SQL sql语法&#xff1a;select * from user limit startIndex&#xff0c;pageSize; 步骤&#xff1a; 1、接口 2、Mapper.xml 3、测试 方式二&#xff1a;使用注解开发 1、…

Java同城货运搬家货运车小程序系统源码

&#x1f69a;同城搬家不头疼&#xff01;揭秘“同城货运搬家货运车小程序”的省心秘籍 &#x1f4f1;开篇&#xff1a;一键下单&#xff0c;搬家新风尚 告别传统搬家的繁琐与不便&#xff0c;今天给大家种草一款超实用的生活神器——“同城货运搬家货运车小程序”&#xff0…

【设计模式:工厂模式】

目录 工厂模式的特点&#xff1a; 工厂模式种类 简单工厂模式&#xff1a; 简单工厂模式的创建步骤&#xff1a; 简单工厂代码&#xff1a; 工厂模式 &#xff1a; 特点&#xff1a; 工厂模式代码&#xff1a; 抽象工厂模式 抽象工厂的主要组成部分&#xff1a; 抽象…

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…

二维码门楼牌管理应用平台建设:实有单位采集管理

文章目录 前言一、实有单位信息采集&#xff1a;构建城市信息基石二、快速查询功能&#xff1a;精准定位&#xff0c;一触即达三、单位详情全面展示&#xff1a;历史轨迹&#xff0c;一目了然四、信息核实机制&#xff1a;确保数据准确无误五、单位注销流程&#xff1a;灵活管理…

Jenkins保姆笔记(1)——基于Java8的Jenkins安装部署

前言 记录分享下Jenkins的相关干货知识。分2-3篇来介绍Jenkins的安装部署以及使用。还是和以前一样&#xff0c;文章不介绍较多概念和细节&#xff0c;多介绍实践过程&#xff0c;以战代练&#xff0c;来供大家学习和理解Jenkins 概念 Jenkins是一个开源的自动化服务器&…

7.31 Day13 DHCP服务器的配置与管理

DHCP服务及其工作原理 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;提供了动态配置IP地址的功能。在DHCP网络中&#xff0c;客户端不再需要自行输入网络参数&#xff0c;而是由DHCP服务器向客户端自动分配。 DHCP服务工作端…

拓扑未来物联网平台简介

拓扑未来物联网平台是基于Thingsboard二次开发的面向产业互联和智慧生活应用的物联网PaaS平台&#xff0c;支持适配各种网络环境和协议类型&#xff0c;可实现各种传感器和智能硬件的快速接入。有效降低物联网应用开发和部署成本&#xff0c;满足物联网领域设备连接、智能化改造…

day27——homework

1、使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <fcntl.h> #include <uni…

释放自动化测试潜能:性能优化策略与实战技巧!

引言 在当今追求软件快速迭代的环境下&#xff0c;自动化测试的性能瓶颈正成为制约开发流程加速的主要障碍。本文将深入探讨如何通过策略和实践&#xff0c;优化自动化测试的性能&#xff0c;实现测试执行速度的质的飞跃。 自动化性能瓶颈的识别与突破 首先&#xff0c;识别并…

Day4

请求与响应 请求和响应是Web应用的基本组成部分&#xff0c;它们处理客户端&#xff08;通常是浏览器&#xff09;和服务器之间的交互。 注意三个常见的请求和响应就行&#xff1a; 【注意】&#xff1a; 关于重定向&#xff1a; 浏览器向某个网站发来请求&#xff0c;该网…