Pandas进阶:拼接 concat 使用方法

1.处理索引和轴

假设我们有2个关于考试成绩的数据集。

df1 = pd.DataFrame({ 
    'name':['A','B','C','D'],
    'math':[60,89,82,70],
    'physics':[66, 95,83,66],
    'chemistry':[61,91,77,70] 
})
df2 = pd.DataFrame({ 
    'name':['E','F','G','H'],
    'math':[66,95,83,66],
    'physics':[60, 89,82,70],
    'chemistry':[90,81,78,90] 
})

最简单的用法就是传递一个含有DataFrames的列表,例如[df1, df2]。默认情况下,它是沿axis=0垂直连接的,并且默认情况下会保留df1和df2原来的索引。

pd.concat([df1,df2])

图片

如果想要合并后忽略原来的索引,可以通过设置参数ignore_index=True,这样索引就可以从0到n-1自动排序了。

pd.concat([df1,df2],ignore_index = True)

图片

如果想要沿水平轴连接两个DataFrame,可以设置参数axis=1

pd.concat([df1,df2],axis = 1)

图片

以上是一些基本操作,我们继续往下看。

2.避免重复索引

我们知道了concat()函数会默认保留原dataframe的索引。那有些情况,我想保留原来的索引,并且我还想验证合并后的结果是否有重复的索引,该怎么办呢?

可以通过设置参数verify_integrity=True,将此设置True为时,如果存在重复的索引,将会报错。比如下面这样。

try:
    pd.concat([df1,df2], verify_integrity=True)
except ValueError as e:
    print('ValueError', e)
ValueError: Indexes have overlapping values: Int64Index([0, 1, 2, 3], dtype='int64')

3.使用keys和names选项添加层次结构索引

添加层次结构索引非常的有用,可以进行更多层的数据分析。

举个例子,某些情况下我们并不想合并两个dataframe的索引,而是想为两个数据集贴上标签。比如我们分别为df1df2添加标签Year 1Year 2

这种情况,我们只需指定keys参数即可。

res = pd.concat([df1,df2],keys = ['Year 1','Year 2'])
res

图片

如果我们想要获取Year 1的数据集,可以直接使用loc像下面这样操作:

res.loc['Year 1']

另外,参数names可用于为所得的层次索引添加名称。例如,将名称Class添加到刚创建的的标签上。

pd.concat(
    [df1,df2],
    keys = ['Year 1','Year 2'],
    names = ['Class',None],
)

图片

如果要重置索引并将其转换为数据列,可以使用 reset_index(),这一步操作也是非常的实用。

pd.concat(
    [df1, df2], 
    keys=['Year 1', 'Year 2'],
    names=['Class', None],
).reset_index(level=0)   
# reset_index(level='Class')

图片

4.列匹配和排序

concat()函数还可以将合并后的列按不同顺序排序。虽然,它会自动将两个df的列对齐合并。但默认情况下,生成的DataFrame与第一个DataFrame具有相同的列排序。例如,在以下示例中,其顺序与df1相同。

图片

如果想要按字母顺序对结果DataFrame进行排序,则可以设置参数sort=True

pd.concat([df1, df2], sort=True)

图片

或者也可以自定义排序,像下面这样:

custom_sort = ['math', 'chemistry', 'physics', 'name']
res = pd.concat([df1, df2])
res[custom_sort]

图片

5.连接CSV文件数据集

假设我们需要从一堆CSV文件中加载并连接数据集。常规做法,我们可能会使用for循环解决,比如下面这样。

import pathlib2 as pl2
ps = pl2.Path('data/sp3')
res = None
for p in ps.glob('*.csv'):
    if res is None:
        res = pd.read_csv(p)
    else:
        res = pd.concat([res, pd.read_csv(p)])

但上面pd.concat()在每次for循环迭代中都会被调用一次,效率不高,推荐使用列表推导式的写法。

import pathlib2 as pl2
ps = pl2.Path('data/sp3')
dfs = (
    pd.read_csv(p, encoding='utf8') for p in ps.glob('*.csv')
)
res = pd.concat(dfs)
res

这样就可以用一行代码读取所有CSV文件并生成DataFrames的列表dfs。然后,我们只需要调用pd.concat(dfs)一次即可获得相同的结果,简洁高效。

使用%%timeit测试下上面两种写法的时间,第二种列表推导式大概省了一半时间。

# for-loop solution
298 ms ± 11.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
# list comprehension solution
153 ms ± 6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Siemens-NXUG二次开发-新建与保存prt文件[Python UF][20231204]

Siemens-NXUG二次开发-新建与保存prt文件[Python UF][20231204] 1.python uf函数1.1 NXOpen.UF.Part.New1.2 NXOpen.UF.Part.Save1.3 NXOpen.UF.Ui.OpenListingWindow1.4 NXOpen.UF.Ui.IsListingWindowOpen1.5 NXOpen.UF.Ui.WriteListingWindow1.6 NXOpen.UF.Ui.SaveListingWin…

Spring MVC学习随笔-文件下载和上传(配置文件上传解析器multipartResolver)

学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 学习视频:【编程不良人】继spring之后快速入门springmvc,面对SpringMVC不用慌 六、SpringMVC 文件上传下载 6.1 文件…

LeetCode(49)用最少数量的箭引爆气球【区间】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 用最少数量的箭引爆气球 1.题目 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [x_start, x_end] 表示水平直径在 x_start 和 x_end之间的气球。你不知道气…

【WPF.NET开发】创建简单WPF应用

本文内容 先决条件什么是 WPF?配置 IDE创建项目设计用户界面 (UI)调试并测试应用程序 通过本文你将熟悉在使用 Visual Studio 开发应用程序时可使用的许多工具、对话框和设计器。 你将创建“Hello, World”应用程序、设计 UI、添加代码并调试错误。在此期间&#…

leetcode 142.环形链表2

我来更新 leetcode 题目了,接着上一次,这一次是上一道题目的提升(有点数学题的感觉) 142.环形链表2 题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表…

CCKS2023-面向上市公司主营业务的实体链接评测-亚军方案

赛题分析 大赛地址 https://tianchi.aliyun.com/competition/entrance/532097/information 任务描述 本次任务主要针对上市公司的主营业务进行产品实体链接。需要获得主营业务中的产品实体,将该实体链接到产品数据库中的某一个标准产品实体。产品数据库将发布在竞赛…

RK3568平台开发系列讲解(Linux系统篇) dtb 到 device_node 的转化

🚀返回专栏总目录 文章目录 一、dtb 展开流程二、dtb 解析过程源码分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过设备树 dtb 如何展开成 device_node 一、dtb 展开流程 设备树源文件编写: 根据设备树的基本语法和相关知识编写符合规范的设备树。…

工具类整理

常用工具类 在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的:轮子。 CollectionUtils 目前比较主流的是spring的org.springframework.util包下的CollectionUtils工具类。和apache的org.apache.commons.collections包下的Co…

根据豆瓣对《流浪地球》的短评数据进行文本分析和挖掘

1背景 2019年2月5日电影《流浪地球》正式在中国内地上映。该电影在举行首映的时候,口德好得出奇,所有去看片的业界大咖都发出了画样赞叹,文化学者能锦说:“中国科幻电影元年开启了。"导演徐峰则说,“里程碑式的电影&#xf…

实时流式计算 kafkaStream

文章目录 实时流式计算Kafka StreamKafka Streams 的关键概念KStreamKafka Stream入门案例编写SpringBoot 集成 Kafka Stream 实时流式计算 一般流式计算会与批量计算相比较 流式计算就相当于上图的右侧扶梯,是可以源源不断的产生数据,源源不断的接收数…

WEB服务器配置与HTTP分析

目录 实验目的: 实验要求: 实验原理: 实验步骤: 步骤1:创建拓扑 步骤2:为PC、Client和Server配置IPv4地址、子网掩码和域名服务器 步骤3:启动设备和服务器 步骤4:测试PC-1、C…

【Qt开发流程】之自定义语法高亮和使用HTML语法

描述 语法高亮(Syntax Highlighting)是一种在编辑器中突出显示代码语法元素的技术,使其更易于阅读和理解。 Qt提供了一个功能齐全的语法高亮框架,支持多种语言和格式,可以自定义颜色和样式。 对于使用Qt的开发人员来说…

HADOOP::Fsimage和Edits解析

NameNode被格式化之后,将在/opt/module hadoop-3.1.3/data/tmp/dfs/name/curent目录 中产生如下文件 fsimage_ 0000000000000000000 fsimage_ 0000000000000000000.md5 seen_txid VERSION (1) Fsimage文件: HDFS文件系统元数据的一个永久性的检查点&#xff0…

使用pytorch从零开始实现迷你GPT

生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…

机器学习决策树ID3算法

1、先去计算总的信息量 2、根据不同指标分别计算对应的信息增益 3、根据算出的信息增益来选择信息增益最大的作为根结点 4、天气中选择一个继续上述过程 5、决策树划分结束

solidity实现ERC20代币标准

文章目录 1、以太坊 - 维基百科2、IERC203、ERC204、Remix 编译部署 1、以太坊 - 维基百科 以太坊(Ethereum)是一个去中心化的开源的有智能合约功能的公共区块链平台。以太币(ETH 或 Ξ)是以太坊的原生加密货币。截至2021年12月&a…

克服.360勒索病毒:.360勒索病毒的解密和预防

导言: 在数字化的今天,数据安全问题变得愈发棘手。.360勒索病毒是当前网络空间的一场潜在灾难,对于这个威胁,了解应对之道和采取切实的预防措施至关重要。如果您正在经历勒索病毒的困境,欢迎联系我们的vx技术服务号(s…

华为手环配置技巧

前言 华为手环作为生活健康辅助设备发挥不可忽视的作用,但每次更换手环后需要重新配置。华为手环不仅有健康监测、消息通知、天气推送、离线支付、公交卡、运动锻炼、等功能,还有倒计时、计时器、手电筒、闹钟、等小工具。下文介绍如何进行配置。 配置…

C/C++学生选课/排课系统[2023-12-3]

问题描述:根据我校自动化专业的部分必修及选修课信 息,设计一个学生选课/排课系统。 基本要求: 1、从文件读入课程信息; 2、从键盘输入拟添加的选修课信息; 3、删除已选的选修课(1门或多门) ; 4、输出已…

【小沐学Python】网络爬虫之lxml

文章目录 1、简介2、安装3、基本功能3.1 lxml.etree3.2 解析HTML网页3.3 读取并解析HTML文件3.4 提取所有a标签内的文本信息3.5 树迭代3.6 序列化3.7 元素以字典的形式携带属性3.8 元素包含文本 4、代码测试4.1 lxml解析网页4.2 使用xpath获取所有的文本4.3 使用xpath获取 clas…