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

news2024/11/27 18:42:31

一、

1、长宽格式转换

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

stack()其使用法如下:

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

df.stack(
    level = -1 :需要处理的索引级别,默认为全部,int/string/list
    dropna = 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/list
    fill_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 pd

data = {'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 = False
    keys = 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 pd

df1 = 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(
    需要合并的 DF
    left :需要合并的左侧 DF
    right :需要合并的右侧 DF
    how = ' 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.coloradmin.cn/o/1956889.html

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

相关文章

【python】PyQt5中QToolButton的详细用法教学与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

jeecguniapp开发小结

一、问题:app发行后图片不显示 解决:绝对路径改成相对路径 另外&#xff1a;避免发行上线图片变形要给到图标或图片具体宽高 //绝对路径 <img src"/static/home/128/wendang.png" style"width:90rpx;height:90rpx;"/> //相对路径 <img src"…

Anaconda环境迁移方法

前言 当我们需要将在一个新电脑上配置Anaconda的环境时&#xff0c;联网的情况下是需要在Anaconda Prompt上安装python环境以及一堆库&#xff1b;离线的情况下则需要用wheel文件一个一个装&#xff0c;十分麻烦。因此方便起见&#xff0c;我们可以将当前电脑上已有的Anaconda…

预测元器件温度的十大技巧——高级操作指南

元器件温度预测为什么很重要&#xff1f; 元器件温度预测在很多方面都有重要意义。一直以来&#xff0c;元器件温度关系到可靠性&#xff0c;早期研究认为现场故障率与稳态元器件温度相关。近来&#xff0c;基于物理学的可靠性预测将电子组件的故障率与工作周期&#xff08;开…

“论大数据处理架构及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面&#xff0c;旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构&#xff0c;它是一种将批处理和流…

apache2和httpd web服务器

apache2和httpd web服务器 apache2和httpd web服务器是啥apache是软件基金会apache2是一个web服务httpd和apache2是同一个东西&#xff0c;但是不同linux发行版中叫法不一样。就是同一个东西&#xff0c;但是看上去有一些不一样。 apache2和httpd web服务器是啥 apache是软件基…

使用chainlit快速构建类似OPEN AI一样的对话网页

快速开始 创建一个文件&#xff0c;例如“chainlit_chat” mkdir chainlit_chat进入 chainlit_chat文件夹下&#xff0c;执行命令创建python 虚拟环境空间(需要提前安装好python sdk。 Chainlit 需要python>3.8。,具体操作&#xff0c;由于文章长度问题就不在叙述&#xf…

CUDA编程之grid和block详解

CUDA 文章目录 CUDAgrid和block基本的理解1维 遍历2维 遍历3维 遍历3维 打印对应的thread grid和block基本的理解 Kernel&#xff1a;Kernel不是CPU&#xff0c;而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机&#xff08;CPU&#xff09;调…

谈一谈数据库中的死锁问题

文章目录 死锁是什么&#xff1f;死锁的四个必要条件避免死锁的策略 本篇文章是基于《MySQL45讲》来写的个人理解与感悟。 死锁是什么&#xff1f; 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。若无外力作用&a…

Linux--Socket 编程 TCP(Echo Server)

目录 1.认识TCP接口 2.Echo Server 2.1添加的日志系统&#xff08;代码&#xff09; 2.2解析网络地址 2.3 服务端逻辑 &#xff08;代码&#xff09; 2.4客户端逻辑&#xff08;代码&#xff09; 2.5代码测试 1.认识TCP接口 下面介绍程序中用到的 socket API,这些函数都在…

“简源共生“:融合乔布斯与埃隆·马斯克智慧之光的设计思维在产品开发中的应用

在科技创新的浩瀚星空中&#xff0c;史蒂夫乔布斯&#xff08;Steve Jobs&#xff09;与埃隆马斯克&#xff08;Elon Musk&#xff09;无疑是两颗璀璨的明星&#xff0c;他们以独特的设计思维引领了时代的潮流&#xff0c;塑造了无数颠覆性产品。本文旨在深入剖析这两位巨匠的设…

文本编辑三剑客(grep)

目录 正则表达式 元字符 grep 案例 我在编写脚本的时候发现&#xff0c;三个文本编辑的命令&#xff08;grep、sed、awk&#xff0c;被称为文本编辑三剑客&#xff0c;我习惯叫它三巨头&#xff09;用的还挺多的&#xff0c;说实话我一开始学的时候也有些懵&#xff0c;主要…

深入分析 Android ContentProvider (八)

文章目录 深入分析 Android ContentProvider (八)ContentProvider 高级使用及最佳实践案例分析&#xff08;续&#xff09;1. 深入了解跨应用数据共享示例&#xff1a;跨应用数据共享的完整实现1. 定义权限2. 定义 ContentProvider3. ContentProvider 实现 2. 实践案例&#xf…

UG NX2406 安装教程

软件介绍 UG是一个交互式CAD/CAM(计算机辅助设计与计算机辅助制造)系统&#xff0c;它功能强大&#xff0c;可以轻松实现各种复杂实体及造型的建构。 它在诞生之初主要基于工作站&#xff0c;但随着PC硬件的发展和个人用户的迅速增长&#xff0c;在PC上的应用取得了迅猛的增长…

用TypeScript完成的贪吃蛇小游戏

食物类Fod // 定义 class Food {// 定义一个属性表示食物所对应的元素element:HTMLElement;constructor(){//加个&#xff01;表示不能为空,非空断言操作符 //获取页面中的food元素并将其赋值给element this.elementdocument.getElementById(food)!;}// 定义一个获取食物x轴坐…

【C++】c++语法基础

引入&#xff0c;第一个c程序 这是用c写的helloworld程序 #include<iostream> using namespace std; int main() {cout << "hello,world\n" << endl;return 0;} 接下来我们将根据上述的代码来学习c的基本语法。 命名空间&#xff08;namespace…

PHP:连接钉钉接口-钉钉回调事件,本地测试数据

前置数据参考 数据说明:参见官方文档回调事件消息体加解密 - 钉钉开放平台 (dingtalk.com) URL后面带的参数: signature=5a65ceeef9aab2d149439f82dc191dd6c5cbe2c0&timestamp=1445827045067&nonce=nEXhMP4r Post参数: { "encrypt":"1a3NB…

日常开发记录分享——C#控件ToolTip实现分栏显示内容

文章目录 需求来源实现思路实施请看VCR等等别走&#xff0c;有优化 需求来源 需要在鼠标浮动到指定位置后提示出详细的信息&#xff0c;一开始使用的tooltip实现&#xff0c;但是里面的内容效果并不理想&#xff0c;需要有条理性&#xff0c;于是就想到能不能将展示的东西分列…

邮件推送API如何集成到现有系统发送邮件?

邮件推送API安全性策略&#xff1f;如何选择邮件推送API服务商&#xff1f; 在当今数字化时代&#xff0c;邮件通信是企业和个人交流的重要方式之一。集成邮件推送API到现有系统可以大大提升通信效率和自动化程度。AokSend将介绍如何将邮件推送API集成到现有系统中&#xff0c…

关于P2P(点对点)

P2P 是一种客户端与客户端之间&#xff0c;点对点连接的技术&#xff0c;在早前的客户端都是公网IP&#xff0c;没有NAT的情况下&#xff0c;P2P是较为容易实现的。 但现在的P2P&#xff0c;实现上面会略微有一些复杂&#xff1a;需要采取UDP打洞的技术&#xff0c;但UDP打出来…