pandas_使用总结(1)

取值操作

常用方式

  • df[‘Q1’] # 选择‘Q1’列,同df.Q1,返回一个Series
  • df[[‘name’,‘Q1’]] # 选择多列,注意括号
  • df[0:3] # 取前三行
  • df[0:10:2] # 0到前10行中每两行取一次数据(python 切片操作: start : end : steps)
  • df.head() # 查看前5条记录
  • df.tail() # 查看后5条记录
  • df.sample() # 随机抽查5条记录

掩码取值

常用于数据清洗

  • df[df.Q1.notna()] # 取出有效的行 (Q1不为NaN的行)
  • df.[df.notnull().all(1)] # 获取所使用包含NaN的行;df.notnull().all(1):返回行是否不包含NaN;df.notnull().all(0):返回列是否不包含NaN

df.notnull() 返回一个bool型的DataFrame

df.Q1.notna() 返回一个 bool型的Series

loc函数

df.loc[x,y] # 是—个非常强大的数据选择函数’其中x代表行’y代表列’行和列都支持条件表达式,也支持类似列表那样的切片

  • df.loc[:,[‘name’,‘Q1’]] # 选择所有行,‘name’、'Q1’列;效果同df[[‘name’,‘Q1’]]
  • df.loc[‘Ben’,‘Q1’:‘Q4’] # 选择行列(Ben Q1到Q4的成绩)
  • df.loc[‘Eorge’:‘Alexander’,‘team’:‘Q4’] # 选择行列,指定行区间

iloc函数

df.iloc[x,y] # 类似df.loc[x,y],loc针对列名、索引;iloc针对行、列排列序号

  • df.iloc[:10,:] #前10行

列名操作

增加列

  • df[‘one’] = 1 # 增加一个固定值的列
  • df[‘total’] = df.Q1+df.Q2+df.Q3+df.Q4 # 增加成绩总和
  • df[‘total’] = df.loc[:,‘Q1’:‘Q4’].apply(lambda x: sum(x),axis=1) # 效果同上
  • df[‘total’] = df.sum(axis=1) # 把所有为数字的列相加
  • df[‘avg’] = df.total/4 # 增加平均成绩列

修改列(行)名

reindex
  • df.reindex(columns=colmnsList) # 修改列名;colmnsList为列名列表;如果使用命名参数,修改的时索引名称
  • df.reindex(colmnsList) # 修改的时索引名称
rename
  • data.rename(index={‘OHIO’: ‘INDIANA’}, columns={‘three’: ‘pekaboo’}) # 根据字典替换对应的列/索引名称
  • data.rename(index={‘OHIO’: ‘INDIANA’}, inplace=True) # 在源数据上修改

删除列(行)

  • df.drop([‘index1’,’index2’]) # 删除多行
  • df.drop(index1) # 删除单行
  • df.drop([‘colmn1’,’ colmn 2’],axis=1) # 删除多列
  • df.drop(colmn1,axis=’columns’) # 删除列

索引操作

pandas中的索引可以重复,但业务上一般要求索引唯一。

创建索引

  • df.set_index(‘name’) # 设置name列为索引
  • df.set_index([‘name’,‘team’]) #设置层级索引
  • df.set_index([df.name.str[0],‘name’]) #设置层级索引
  • df.set_index(‘name’,inplace=True) #设置 inplace=True参数可以直接修改原df
  • df.set_index(‘name’,drop=False) # 保留原列
  • df.set_index(‘name’,append=True) # 保留原索引

重置索引

  • df.reset_index() # 清除索引

  • df.reset_index(inplace=True) #设置 inplace=True参数可以直接修改原df

  • df.reset_index([‘month’,‘year’]).reset_index(level=1) # year二级索引清除;level=0表示一级索引

  • df.reset_index([‘month’,‘year’]).reset_index(level=‘year’)# 效果同上

索引其他常用方法

  • df.index.astype(‘int64’) # 转换类型
  • df.index.rename(‘number’) # 修改索引的名称
  • df.index.sort_values(ascending=False) # 排序,倒序
  • df.index.rename(‘grade’,inpalce=True) # 重命名索引
  • df.index.rename([‘species’,‘year’]) # 多层,重命名索引
  • df.index.T # 转置,在多层索引里很有用
  • df.index.set_names(‘species’,level=0) # 设置名称
  • df.index.set_names([‘kind’,‘year’],inplace = True) # 设置名称

多级 行、列索引

# 索引
index_arrays=[[1,1,2,2],['男','女','男','女']]
# 列名
columns_arrays = [['2019','2019','2020','2020'],['上半年','下半年','上半年','下半年']]# 转换成层级索引
index = pd.MultiIndex.from_arrays(index_arrays,names=('班级','性别'))
columns = pd.MultiIndex.from_arrays(colums_arrays,names=('年份','学期'))
df = pd.DataFrame([(88,99,88,99),(77,88,97,98),(67,89,54,78),(34,67,89,54)],columns=columns,index=index)
  • df[0:3] # 取一级索引的前3行(实际数可能多于三行,因为取得是一级索引,一级索引下可能有多条二级索引数据)
  • df.loc[(1,“男”)] # 同时使用一、二级索引获取数据(将需要查询的索引条件组成一个元组)
  • df.loc[(1,“男”),(slice(None),‘下半年’)] # 行、列同时查询,slice(None)可以在元组中占位
  • df.loc[😢‘2020’,slice(None))] # 只看2020年的数据
  • df.loc[(slice(None),‘女’),:] # 只看女生
层级索引切片

pd.IndexSlice 可以创建一个切片对象,轻松执行复杂的索引切片操作

idx = pd.IndexSlice
idx[0] # 0
idx[:] # slice(None,None,None) 起始位置,结束位置,步长
idx[0,'x'] # (0,'x')
idx[0:3]  # slice(0,3,None)
idx[0:5,'x':'y'] #(slice(0,5,None),slice('x','y',None))
  • df.loc[idx[:,[‘男’]],:] # 只显示男生
  • df.loc[:,idx[:,[’ 上半年’]]] # 只显示上半年

数据合并

concat

DataFrame 的合并都是逐行进行的(默认设置是axis=0)

  • df3 =make_df(‘AB’,[0,1])
  • df4=make_df(‘CD’,[0,1])
  • pd.concat([df3,df4],axis=1) # 列拼接 (横向)合并后会有2行4列
  • pd.concat([df3,df4]) # 行拼接 (纵向) 合并后会有4行4列,缺失的数据会用NaN填充
join、join_axes 参数

join 和 join_axes 参数设置合并方式。默认使用join=‘outer’(并集),可以通过join参数指定合并方式。

  • df5 =make_df(‘ABC’,[0,1])
  • df6=make_df(‘BCD’,[0,1])
  • pd.concat([df5, df6], join=‘inner’) # 合并列名交集(合并后只有B、C两列)

另一种合并方式是直接确定结果使用的列名,设置 join_axes 参数,指定列名

pd.concat([df5, df6], join_axes=[df5.columns]) # 指定使用df5的列名,df6中不存在的列名合并时自动删除

索引问题

pd.concat 会保留索引,即使索引重复

想要检测 pd.concat() 合并的结果中是否出现了重复的索引,可以设置 verify_integrity 参数。将参数设置为 True,合并时若有索引重复就会触发异常。

try:pd.concat([x,y],verify_integrity=True)
except Exception as e:print(e)
Indexes have overlapping values: Int64Index([0, 1], dtype='int64')

可以通过设置 ignore_index 为True忽略重复索引,合并时会生成新的索引

pd.concat([x,y],ignore_index=True)
#	A	B
# 0	A0	B0
# 1	A1	B1
# 2	A2	B2
# 3	A3	B3

通过keys指定层级索引

pd.concat([x,y],keys=['x','y'])
# A	 B
# x	 0	A0	B0
# 	 1	A1	B1
# y	 0	A2	B2
# 	 1	A3	B3

append

与 Python 列表中的 append() 和 extend() 方法不同,Pandas 的 append() 不直接更新原有对象的值,而是为合并后的数据创建一个新对象。因此,它不能被称之为一个非常高效的解决方案,因为每次合并都需要重新创建索引和数据缓存。

df1 = make_df('AB',[1,2])
df2 = make_df('AB',[3,4])df1.append(df2)  # 同pd.concat([df1,df2])

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

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

相关文章

企业如何选择安全又稳定的文件传输协议

企业无论是内部的数据共享,还是与外部的合作交流,都需要通过网络进行文件的传输和交换。然而,文件传输它涉及到多方面的因素,例如文件的大小、数量、类型、敏感性、传输距离、网络环境等。这些因素都会影响到文件传输的各个方面&a…

“5G+北斗”赋能千行百业,中海达亮相2023中国移动全球合作伙伴大会

10月12日,2023中国移动全球合作伙伴大会在广州保利世贸博览馆召开。本次活动以“算启新程 智享未来”为主题,重点展示中国移动全球合作伙伴在5G、终端、数智城市等方面的新产品、新技术和新服务。作为中国移动“朋友圈”战略合作企业及“北斗时空子链”链…

快速自动化处理JavaScript渲染页面

在进行网络数据抓取时,许多网站使用了JavaScript来动态加载内容,这给传统的网络爬虫带来了一定的挑战。本文将介绍如何使用Selenium和ChromeDriver来实现自动化处理JavaScript渲染页面,并实现有效的数据抓取。 1、Selenium和ChromeDriver简介…

Java中通过List中的stream流去匹配相同的字段去赋值,避免for循环去查询数据库进行赋值操作

List<EquipmentDeviceMessage> equipmentDeviceMessageInfo greenThinkTanksInfoPlanMapper.getEquipmentDeviceMessageInfo(phone, startDate, endDate); List<BladeUserVo> userList bladexsqlMapper.getUserList();Q&#xff1a;上面两个列表怎么使用流&#…

Java8 新特性之Stream(三)-- Stream的终结操作

目录 1.forEach(Consumer) 2.reduce(BinaryOperator) 3.max([Comparator]) 4.min([Comparator]) 5.count() 6.findFirst() 7.findAny() 拓展:

OpenWrt如何公网ssh远程连接【内网穿透】

文章目录 1.安装cpolar内网穿透2.配置SSH远程访问隧道3.公网远程连接4.固定远程连接地址 简单几步实现openWRT结合cpolar内网穿透工具实现远程ssh连接 1.安装cpolar内网穿透 cpolar是一个非常棒的跨平台、内网穿透工具&#xff0c;可以通过安全隧道将NAT或防火墙后面的本地服…

【Springboot】Filter 过滤器的使用

一、基本介绍 过滤器 Filter 作为 Java 三大器之一&#xff0c;在 Java Web 的使用中有很高的地位。所谓过滤器&#xff0c;就是实现了 javax.servlet.Filter 接口的服务器端程序&#xff0c;就是对事物进行过滤的。在 Web 中的过滤器&#xff0c;当然就是对请求进行过滤&#…

解决axios不发起请求的问题

一个很简单axios发起的get请求&#xff0c;但是network就是没有xhr记录&#xff1a; 找了半天也没有找到原因&#xff0c;后来问了chatgpt才找到原因&#xff1a; 请求地址url前面没有const关键字&#xff0c;此时url相当于undefined&#xff0c;而axios在url为undefined时不会…

天猫商品品牌数据采集接口,天猫商品详情数据接口,天猫API接口

天猫商品品牌数据采集方法如下&#xff1a; 打开天猫&#xff0c;进入任意一个品牌的商品页面。点击浏览器右上角的“选项”按钮&#xff0c;选择“检查元素”或使用快捷键CtrlShiftI&#xff08;Windows&#xff09;或CmdOptionI&#xff08;Mac&#xff09;打开开发者工具。…

JVM类装载器详解

目录 一、类装载的过程 1.1 装载(Load) 1.2 链接(Link) 1.2.1 验证(Varify) 二、类装载器组成 1. JVM 中内置了三个重要的 ClassLoader&#xff0c;同时按如下顺序进行加载&#xff1a; 2、图解 3、加载原则 所谓的双亲委派 类加载器负责在运行时将Java类动态加载到Java虚拟机&…

一起学SF框架系列附-常用官网及知识点资源链接推荐

学习SpringFramework过程中&#xff0c;用到的一些好的资源链接罗列如下&#xff1a; 1、常用官网地址 spring官网&#xff1a;https://spring.io/ springframework文档官网&#xff1a;https://docs.spring.io/spring-framework/reference/index.html maven库&#xff1a;http…

多关键词高亮显示

引入关键词文件&#xff0c;符合有条件的背景色高亮显示&#xff0c;也可取消。 <div id"testHtml"><p>写入的文本</p><p>关键词</p></div> var str 多个关键词&#xff0c;关键词文件&#xff0c;关键词 var strL str.replac…

nginx报错

故障1&#xff1a;nginx 502错误 故障描述 一个 post 的请求&#xff0c;直接调接口服务数据正常返回&#xff0c;但是通过 nginx 代理后&#xff0c; 什么都没有返回 nginx错误日志 upstream sent invalid chunked response while reading upstream 原因 http协议版本不一致…

【C++】C++11—— 包装器

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】C11…

2023年中国TFT-LCD面板产业链、需求量及市场规模分析[图]

按显示技术尺寸来分&#xff0c;主要分为大尺寸和小尺寸&#xff08;10寸以下&#xff09;&#xff0c;TFT-LCD行业下游主要是各类型消费电子&#xff0c;包括PC显示器&#xff0c;液晶电视&#xff0c;智能手机等。 TFT&#xff0d;LCD面板产业链 资料来源&#xff1a;共研产…

【广州华锐互动】利用VR开展细胞基础实验教学有什么好处?

在科技发展的驱动下&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已被广泛应用于各个领域&#xff0c;包括教育和医学。尤其是在医学教育中&#xff0c;VR技术已成为一种革新传统教学模式的有效工具。本文将探讨使用VR进行细胞基础实验教学的优势。 首先&#xff0c;VR技…

(SCADA)监控与数据采集系统

SCADA应用于监控和采集数据来控制工业过程软件。它通过收集和传输实时数据&#xff0c;帮助操作员监视和控制各种设备和过程。这篇文章将介绍SCADA系统的工作原理、应用行业和场景&#xff0c;以及所需的模块和硬件设备。最后&#xff0c;还会详细介绍几款国外SCADA软件给大家参…

VUE整合Echarts实现简单的数据可视化

文章目录 前言 一、Echarts的安装 二、可视化渲染 1.柱状图 2.饼图 3.主题的下载 总结 前言 ECharts是一款功能强大的前端数据可视化库&#xff0c;支持多种图表类型和统计图表、地理数据可视化、关系型数据展示、多维数据处理和商业智能功能。通过广泛的图表类型、统计分析…

FPGA面试题(5)

一.FPGA可以综合实现为RAM/ROM/CAM的三种资源及注意事项 三种资源&#xff1a;BLOCK RAM&#xff0c;触发器&#xff08;FF&#xff09;&#xff0c;查找表&#xff08;LUT&#xff09; 注意事项&#xff1a; 1.生成RAM&#xff0c;首选BLOCK RAM。因为BLOCK RAM是已经存在的“…

Springboot项目中加载Groovy脚本并调用其内部方代码实现

前言 项目中部署到多个煤矿的上&#xff0c;每一种煤矿的情况都相同&#xff0c;涉及到支架的算法得写好几套&#xff0c;于是想到用脚本实现差异变化多的算法&#xff01;一开始想到用java调用js脚本去实现&#xff0c;因为这个不需要引入格外的包&#xff0c;js对我来说也没…