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

2024-03-07 15:28

本文主要是介绍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提供了大量能使我们快速便捷地处理数据的函数和方法。

这篇关于021—pandas 书单整理将同一种书整理在一起的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/783968

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

android的strings整理脚本

统一对String整理的工具,结构如下 代码 package com.owant.toollib;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.ArrayList;import java.util.List;import java.util

IPython使用技巧整理

以下是一些常见且有用的IPython使用技巧,整理如下: 一、基本功能 1. 启动IPython:在终端输入`ipython`命令即可启动IPython环境。 2. 自动补全:使用`Tab`键进行变量和函数名的自动补全。例如,输入`pri`后按`Tab`键,会自动补全为`print`。 二、魔法命令(Magic Commands) 1. %timeit:用来计时小段代码的执行时间

Go 三色标记法:一种高效的垃圾回收策略

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO系列: 记录博主学习GO语言的笔

交通大数据分析与挖掘实训【对提供的CSV格式数据使用pandas库分析-Matplotlib库绘图】

背景: 《交通大数据分析与挖掘》实训 指    导   书  编著 二○二四年五月 一、实训目的 1、掌握python开发环境(如Anaconda)及Numpy等常见第三方库的使用; 2、熟悉Anaconda在线编程平台,学会基本的python程序编写、编译与运行程序的方法及函数语句; 3、学会导入不同格式数据文件,掌握不同类型数据的基本处理和分析思路; 4、熟练运用所学第三方库,结合相

【科学计算与可视化】2. pandas 基础

1. 安装 Pandas 首先,确保你已经安装了 Pandas。你可以使用以下命令安装:pip install pandas 2. 导入 Pandas 在开始使用 Pandas 之前,你需要先导入它:import pandas as pd 3. 创建数据结构 Pandas 主要有两种数据结构:Series 和 DataFrame。 3.1 Series Series 是一个一维的标签

【K8S运维】整理常见使用命令

*特别提醒: 文件复制类的命令,执行命令等需要谨慎确定命令执行后的效果,否则一旦出错就不可逆!!! 命令概览 序号使用场景命令格式使用样例命令使用说明1查询集群节点有多少kubectl get nodes2查询集群运行哪些podkubectl get pods -o wide -A3查询指定pod名称的pod信息kubeclt get pods -o wide -A|grep <具体pod对象

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合,形成混沌反向学习方法,通过该方 法生成鲸鱼算法的初始种群。混沌序列采用 Tent 混沌映射: x i + 1 = { δ x i 0 < x i < 0.5

pandas.read_csv参数

官方手册 header= header=0 或None In [49]: print(data)a,b,c1,2,34,5,67,8,9In [50]: pd.read_csv(StringIO(data), names=['foo', 'bar', 'baz'], header=0)Out[50]: foo bar baz0 1 2 31 4

「Debug R」有一种报错叫做Windows专享

今天在R里面用Rsamtools 读取BAM文件时遇到了下面的报错 [W::bam_hdr_read] bgzf_check_EOF: No error[E::bgzf_read] Read block operation failed with error -1 after 55 of 167 bytes 这个错误在网上搜了很久,发现很多人都遇到了,但是在这些人的提问后面都没有给出确切的