醒醒,别睡了...讲《数据分析pandas库》了—/—<6>

一、

1、长宽格式转换

        基于多重索引,Pandas 可以很容易地完成长型、宽型数据格式的相互转换。
1.1 转换为最简格式

stack()其使用法如下:

        stack函数用于将DataFrame中的列转换为行,即将宽格式数据转换为长格式数据。

df.stack(level = -1 :需要处理的索引级别,默认为全部,int/string/listdropna = True :是否删除为缺失值的行
)#转换后的结果可能为 Series

例如下列代码

import pandas as pd# 创建DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
}
df = pd.DataFrame(data)# 将列转换为行
stacked = df.stack()
print(stacked)
其打印结果为:
即stack函数将原本的DataFrame转换为了一个Series对象,每个元素的索引由原先的行索引和列索引组成。
1.2 长宽型格式的自由互转
df.unstack(level = -1 :需要处理的索引级别,默认为全部,int/string/listfill_value :用于填充缺失值的数值
)

例如下列代码演示:

import pandas as pd# 创建堆叠的数据
data = {('A', 'x'): [1, 2, 3],('A', 'y'): [4, 5, 6],('B', 'x'): [7, 8, 9],('B', 'y'): [10, 11, 12]
}
stacked = pd.DataFrame(data)# 将数据恢复为原始格式
unstacked = stacked.unstack()
print(unstacked)
其运行结果为:
即unstack函数将原本的堆叠的数据恢复为了原始的DataFrame数据格式,每个列索引成为了多级的列索引。
1.3 数据转置: df.T

        数据转置是将数据的行和列进行互换的操作。在Python中,可以通过使用pandas库的transpose()函数或T属性来实现数据的转置。如果df是一个pandas数据框(DataFrame),可以使用df.T来转置数据。

import pandas as pddata = {'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]}
df = pd.DataFrame(data)print(df)

其打印结果为:

• 可以使用stack函数将列转换为索引:
stacked_df = df.stack()
print(stacked_df)

其输出结果如图所示:    

• 可以使用unstack函数将索引转换为列:
unstacked_df = stacked_df.unstack()
print(unstacked_df)

此时转换会原来的结果:

2、多个数据源的合并

2.1 数据的纵向合并

concat函数 实现数据的纵向合并。默认情况下,concat按照行进行合并。
其具体函数属性以及用法如下:
pd.concat(objs :需要合并的对象,列表形式提供left=pd.DataFrame({'key':['k0','k1','k2','k3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3'],})right=pd.DataFrame({'key':['k0','k1','k2','k3'],'C':['C0','C1','C2','C3'],'D':
['D0','D1','D2','D3'],})axis = 0 :对行还是对列方向逬行合并(0 index 、 1 columns )join = outer :对另一个轴向的索引值如何逬行处理(inner 、outer )ignore_index = Falsekeys = None :为不同数据源的提供合并后的索引值verify_integrity = False 是否检查索引值的唯一性,有重复时报错copy = True
)
2.1.1 一维series拼接
ser1=pd.Series([1,2,3],index=list('ABC'))
ser2=pd.Series([4,5,6],index=list('DEF'))
pd.concat([ser1,ser2])
2.1.2 df 对象拼接
import pandas as pddf1 = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9],'B': [10, 11, 12]})
# 使用concat函数进行纵向合并
combined_df = pd.concat([df1, df2])
print(combined_df)

        在这个例子中,df1和df2是两个具有相同列的DataFrame。通过使用concat函数并传入一个包含df1和df2的列表,可以将它们纵向合并为一个新的DataFrame。合并后的DataFrame保留了原始的行索引。

        需要注意的是,如果两个DataFrame在列的数量或列名上有差异,那么合并时可能会出现缺失值。此时,可以使用参数axis=1来进行横向合并。

此时的生成结果为:
可以使用reset_index重置一下第一列的索引,即下列代码
combined_df.reset_index(drop=True)

其中drop=True表示将生成的index列删除

2.1.3 两个df对象拼接,按行进行拼接
df1=make_df('AB',[1,2])
df2=make_df('AB',[3,4])
pd.concat([df1,df2],axis=1)
#或者
pd.concat([df1,df2],axis='columns')

                

2.1.4 两个df对象拼接,如果索引重复
x=make_df('AB',[1,2])
y=make_df('AB',[1,2])
pd.concat([x,y])
#解决索引重复问题加ignore_index属性
pd.concat([x,y],ignore_index=True)#重置索引
# #解决索引重复问题,加keys属性
pd.concat([x,y],keys=list('xy')) #复合索引

2.1.5 两个df对象拼接,join参数的使用
a=make_df('ABC',[1,2])
b=make_df('BCD',[3,4])
# pd.concat([a,b],join='inner')#内连接,只合并有相同列名的数据
pd.concat([a,b],join='outer')#外连接,合并所有的列
# a=make_df('ABC',[1,2,3,4])
# b=make_df('BCD',[3,4,5])
# pd.concat([a,b],join='outer',axis=1)#沿着y轴方向拼接

2.2 数据的横向合并

2.2.1 可以使用concat()函数

在其中的参数增加一个参数axis=1,即表示横向合并

import pandas as pd# 创建两个数据集
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})# 使用 pd.concat() 函数横向合并
result = pd.concat([df1, df2], axis=1)print(result)
2.2.2 使用pd.merge()函数

函数属性及其用法为:

merge 命令使用像 SQL 的连接方式
pd.merge(需要合并的 DFleft :需要合并的左侧 DFright :需要合并的右侧 DFhow = ' inner':具体的连接类型{left、right 、outer 、 inner、)两个 DF 的连接方式on :用于连接两个 DF 的关键变量(多个时为列表),必须在两侧都出现left_on :左侧 DF 用于连接的关键变量(多个时为列表)right_on :右侧 DF 用于连接的关键变量(多个时为列表)left_index = False :是否将左侧 DF 的索引用于连接right_index = False :是否将右侧 DF 的索引用于连接
)
• 当两个数据有一列完全相同时
left=pd.DataFrame({'key':['k0','k1','k2','k3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3'],})
right=pd.DataFrame({'key':['k0','k1','k2','k3'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2','D3'],})
result=pd.merge(left,right)

其生成结果为:

  
left_on与right_on

        即如果没有一个列相同的,则无法连接,需使用left_on与right_on来确定连接位置

import pandas as pd# 创建两个数据集
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})# 使用 DataFrame.merge() 方法横向合并
result = df1.merge(df2, left_index=True, right_index=True)print(result)

其打印结果为:   

• how参数的使用
#how参数的使用
left=pd.DataFrame({'key':['k0','k1','k2','k3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3'],})
right=pd.DataFrame({'key':['k0','k1','k2','k4'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2','D3'],})
result=pd.merge(left,right,how='left')

即当有一整列相同可以配对时,指定连接类型

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

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

相关文章

中控屏UI设计全解析:布局与交互技巧

在现代科技的浪潮中,中控屏已成为智能系统不可或缺的交互界面。无论是智能家居、车载系统还是工业控制,一个直观、易用且美观的中控屏 UI 设计对于提升用户体验至关重要。本教程将带领你深入探索中控屏UI设计的精髓,指导你如何打造出既专业又…

2024.7.28 记录一次悲惨的笔试——作业帮NLP校招

小红的奇偶抽取 题目描述 题解 #include <iostream> #include<stack> using namespace std;int main() {long long n;stack <int> ji, ou;cin >> n;while (n) {int a n % 10;if (a % 2 0)ou.push(a);elseji.push(a);n n / 10;}long long jN 0, o…

用深度学习改进乳腺癌MRI诊断| 文献速递--AI辅助的放射影像疾病诊断

Title 题目 Improving breast cancer diagnostics with deep learning for MRI 用深度学习改进乳腺癌MRI诊断 01 文献速递介绍 乳腺磁共振成像&#xff08;MRI&#xff09;是一种检测乳腺癌的高度敏感的方式&#xff0c;报告的敏感性超过80%。传统上&#xff0c;其在筛查…

html+css+js作业王者荣耀司空震1个页面带js

htmlcssjs作业王者荣耀司空震1个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89595421 目录1 目录2 项目视频 htmlcssjs作业王者荣耀司空震1个页面 页面1

QQ微信头像制图工具箱小程序纯前端源码

微信小程序源码&#xff0c;经测试QQ小程序也可以完美运行&#xff0c;所以给大家分享一下这个QQ微信头像制图工具箱小程序纯前端源码。 主要功能有文字九格、头像挂件生成、爆趣九宫格、形状九宫格、创意长图、情侣头像、猫狗交流器。 这个QQ微信小程序源码是纯前端的&#x…

2024 Navicat Premium最新版简体中文版破解激活永久图文详细教程(亲测可用)

1.官网下载&#xff1a;下载地址 2.百度网盘下载&#xff1a;下载地址 3.未安装过的用户可直接跳过该步骤&#xff0c;如果已安装Navicat&#xff0c;记得先卸载干净&#xff0c;防止破解失效&#xff0c;卸载完成后执行补丁压缩包中的Navicat.bat脚本&#xff08;一闪而过表示…

Java语言程序设计——篇九(3)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 注解类型 概述标准注解实战演练实战演练实战演练 定义注解类型标准元注解 概述 注解以结构化的方式为程序元素提供信息&#xff0c;这些信息能…

Ubuntu22.04重装系统+基础配置

重装系统 note&#xff1a;备份数据&#xff0c;重装系统后home下的文件会丢失&#xff0c;所以先备份一下home的数据到其他的盘/mnt/下里。记住之前系统的DNS&#xff0c;IP和掩码。 先在Ubuntu官网下载22.04桌面版&#xff08;种子链接要用迅雷下载&#xff09;。但是版本还…

数学重大错误:将无穷多各异射(直)线误为同一线

黄小宁 设本文所说集合往往是元不少于两个的集。定义&#xff1a;若数&#xff08;点&#xff09;集A可保距变为B则称A≌B。显然A≌A。 h定理1&#xff1a;数&#xff08;点&#xff09;集AB≌B的必要条件是A≌B。 证&#xff1a;⑴任何图≌本身。⑵若AB则A必可恒等变换地变…

AOP~面向切面编程介绍

AOP基础 概述 AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;面向特定方法的编程。 动态代理是面向切面编程最主流的实现。 SpringAOP是Spring框架的高级技术&#xff0c;旨在管理bean对象的过程中&#xff0c…

7-23学习笔记

一、异常 即程序中一些程序处理不了的特殊情况 Exception 能被程序本身处理( try-catch )&#xff0c; Error 是无法处理的(只能尽量避免)。 1、异常类 Exception 见过的异常 NullPointerException ArrayIndexoutOfBoundException等 String strnull;System.out.println(st…

【独家揭秘】模块化沙箱如何为企业筑起源代码防泄露的铜墙铁壁

在数字化转型的浪潮中&#xff0c;企业信息安全面临着前所未有的挑战&#xff0c;尤其是在源代码和敏感数据的保护方面。深信达SDC沙盒防泄密系统以其独特的模块化沙箱技术和全面的数据防泄密策略&#xff0c;为企业提供了一套高效且可靠的解决方案&#xff0c;确保源代码和重要…

夸克Android一面凉经(2024)

夸克Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《夸克Android一面凉经(2024)》。 面试职位: 智能信息-客户端开发工程师-夸克小说 技术一…

【Drools】(二)基于业务需求动态生成 DRL 规则文件:事实与动作定义详解

&#xff08;二&#xff09;基于业务需求动态生成 DRL 规则文件&#xff1a;事实与动作定义详解 在现代业务规则管理系统中&#xff0c;灵活高效地生成和管理规则至关重要。通过上一部分的DRT 规则模板&#xff08;请参考&#xff1a;&#xff08;一&#xff09;基于业务需求动…

PHP师生荣誉管理系统—计算机毕业设计源码10079

目 录 摘要 1 绪论 1.1 研究背景 1.2论文结构与章节安排 2 师生荣誉管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

UDP connect 内核源码分析

1 从诡异开始 最近遇到一个线上问题&#xff0c;client 发了一个 udp 请求&#xff0c;服务器回了一个响应&#xff0c;但诡异的是&#xff0c;client 的 log 却看不到对应的处理日志。抓包发现内核发出了一个指示 udp 目的端口不可达的 icmp 报文&#xff0c;类似这样的&#…

ES6语法详解,面试必会,通俗易懂版

目录 Set的基本使用WeakSet 使用Set 和 WeakSet 区别内存泄漏示例&#xff1a;使用普通 Set 保存 DOM 节点如何避免这个内存泄漏MapWeakMap 的使用 Set的基本使用 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&a…

Java面试八股之@Qualifier的作用

Qualifier的作用 Qualifier 是 Spring 框架中的一个非常有用的注解&#xff0c;它主要用于解决在依赖注入过程中出现的歧义问题。当 Spring 容器中有多个相同类型的 Bean 时&#xff0c;Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。 Qualifier 的作用&#x…

成为git砖家(7): posh-git的安装和使用

文章目录 1. PowerShell 里的 git 默认使用体验不够好2. posh-git 介绍2.1 安装 posh-git2.2 PS1 显示的内容2.3 补全分支 1. PowerShell 里的 git 默认使用体验不够好 在 Windows 系统上&#xff0c;安装了 git for windows 后&#xff0c; git bash 里的体验确实不错。 但是…

C# 获取 Excel 文件的所有文本数据内容

目录 功能需求 范例运行环境 关键代码 组件库引入 获取Excel文件的文本内容 总结 功能需求 获取上传的 EXCEL 文件的所有文本信息并存储到数据库里&#xff0c;可以进一步实现对文件内容资料关键字查询的全文检索。有助于我们定位相关文档&#xff0c;基本实现的步骤如下&…