021—pandas 书单整理将同一种书整理在一起

前言

在办公自动化场景下,最常见的需求就是信息的整理,pandas 最擅长复杂数据逻辑的处理,能够让整理工作更加高效,同时不容易出错。今天的案例是将一个平铺的书单按品类进行整理,合并为一行。

需求:

  • 将书按书名进行合并,比如资本论、大学语文、数据结构 各只保留一个就行
  • 增加 备注 列,用于表示书的册数,有三种情况:
  • 册名为数字的,如资本论,显示 1-3
  • 册名为文字的,如大学语文,显示 上下
  • 没有分册的,如数据结构,显示为空

思路:

既然要按书名分组,同时册名要整理在备注中,那我们就要拆书名和册名,这个可以用字符访问器(.str.xx)来操作。
分组后可以用 agg() 来聚合不同的列。
接下来按书名进行分组,作者和 ISBN 编码同组内相同,随便显示其中一个即可,我们可以用 max。
接下来最复杂的就是备注列了,我们可以写一个备注处理的函数来专门处理。
备注列依赖我们将书单列拆分的册名(为了方便后期处理,我们拆分时可以直接叫备注)。这个处理的逻辑是:

  1. 如果此列全是为空,则显示空字符
  2. 如果此列全为数字:则输出「列最小-列最大值」这样的合成字符
  3. 如果以上都不时,就将他们合并起来,这个可以直接用 Series 的 sum,它实现了字符串的拼接
  • 理清了以上逻辑,接下来我们就开始编写代码。

二、使用步骤

1.引入库

代码如下(示例):

from io import StringIO
import pandas as pd

2.读入数据

代码如下(示例):

data = '''
书单,作者,ISBN
资本论 1,袁某,23445-2342
资本论 2,袁某,23445-2342
资本论 3,袁某,23445-2342
大学语文 上,李四,a25245-32425
大学语文 下,李四,a25245-32425
数据结构,王某,x342w-ssa
'''df = pd.read_csv(StringIO(data))
df

在这里插入图片描述

#给它起列列索引名,赋值为一个新的 DataFrame 备用:
df1 = df.书单.str.split(' ', expand=True)
df1 = df1.set_axis(['书名', '备注'], axis=1)
df1

在这里插入图片描述

#将这个拆分的数据合并到原数据中,方便下一步分组:
new_df = pd.concat([df, df1], axis=1)
new_df

在这里插入图片描述

#接下来,编写我们提到的备注处理聚合函数(它的参数备注列分组后的一个 Series):
def mark(ser: pd.Series):# 判断是否全为空值if ser.isna().all():return ''# 判断是否全为数字elif ser.str.isdecimal().all():return f'{ser.min()}-{ser.max()}' else:return ser.sum()
#分组,聚合并应用以上函数:
(new_df.groupby('书名', as_index=False, sort=False).agg({'作者': max,'ISBN': max,'备注': mark})
)
#在分组时,我们取消了让分组名成为索引,取消了分组的重新排序,保持与原数据相同的顺序。

在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

盲人的智慧出行:与APP共赴无障碍之旅

在黑暗中,我从未感到孤单。作为一名盲人,我选择与一款盲人辅助软件蝙蝠避障一同踏上盲人智慧出行之旅,探寻生活中的无限可能。 这款软件拥有先进的障碍物识别技术,其基于先进的激光雷达探测,通过智能语音和触觉反馈&am…

夏泽网注册码

夏泽网注册码申请法:1.打开注册码申请页,http://nianjian.xiaze.com/getcode.php 上面会显示你的注册码链接 (是个红色的链接,不同的时间不同的人这个链接不一样)。 2.将注册码链接以超链接的方式发布在各大网站、论坛、博客(支持各大论坛、百度空间、 网…

yduibuilder,拖拽式开发轻松高效自动生成前端代码

给大家分享一个#开源项目# :#yduibuilder# ,他可以通过拖拽式的开发方式自动生成前端代码,这种#低代码开发工具# 已经很多了,没什么新鲜的; 但yduibuilder式通过编译的方式#生成终端代码# ,没有预设各种功能…

网络安全: Kali Linux 进行 MSFvenom 程序利用

目录 一、实验 1.环境 2. Kali Linux 进行 MSFvenom 程序利用 3. 创建计划任务自动运行 MSFvenom 程序 二、问题 1.在线加密解密 2.MSF 运行失败 3.MobaXterm 连接Ubuntu 失败 一、实验 1.环境 (1)主机 表1 主机 系统版本IP备注Kali Linux20…

centos7保姆级安装jdk8教程

文章目录 1、下载jdk安装包2、在centos7 创建文件夹3、解压jdk文件4、配置环境变量a、打开环境变量文件b、将配置信息复制进去。c、重新加载环境变量 5、测试是否成功 1、下载jdk安装包 jdk下载地址:https://www.oracle.com/java/technologies/downloads/ Oracle…

基于springboot的精准扶贫管理系统论文

精准扶贫管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了精准扶贫管理系统的开发全过程。通过分析精准扶贫管理系统管理的不足,创建了一个计算机管理精准扶贫管理系统的方案。文章介绍了精…

AIGC工具( 7个 )

人工智能技术有好的一方面,又不好的地方,要区别对待,吸取精华,去其糟粕。目前市场上有很多AI大模型,可以支持聊天,写文稿,创作等,部分可以生成图片,以下是7个很不错的免费…

[数据结构初阶】栈

各位读者老爷好,鼠鼠我好久没写博客了(太摆烂了),今天就基于C语言浅介绍一下数据结构里面的栈,希望对你有所帮助吧。 目录 1.栈的概念及结构 2.栈的实现 2.1定义栈 2.2.初始化栈 2.3.入栈 2.4.出栈 2.5.获取栈…

RabbitMQ队列

RabbitMQ队列 1、死信的概念 ​ 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer 从 queue取出消息进行消…

微服务基础

目录 一、单体架构 二、分布式架构 三、微服务 四、微服务结构 五、SpringCloud 六、服务拆分 七、远程调用 一、单体架构 单体架构就是将业务的所有功能都集中在一个项目中进行开发,并打成一个包进行部署。 他的优点很明显,就是架构简单&#xff…

JVM-类加载机制

名词解释 *.class文件的结构 查看指令: javap -verbose hello.class 包含信息: 结构信息(版本号,大小信息); 元数据(类,继承,接口,字段声明,方法声…

应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

作者:古琦 在现代软件架构中,微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能,它们共同工作以提供完整的服务。由于微服务架构的分散特性,监控变得至关重要,有效的微服务监控是…