023—pandas 扩展逗号爆炸分隔字符串数据

需求:

将 c1 按逗号拆分,爆炸为一行一行数据,然后将 c1 后边的有逗号的扩展成行,没逗号的只写在第一行。

思路:

  • 先将 DataFrame 中有逗号的值分拆转为列表,接下来我们对 c1
    进行爆炸,就得到了整个数据的基本框架,在这个框架上我们修改调整数据。
  • 将 a、b 两列设置为索引,这样我们就只处需要处理的逻辑(当然 c1
    也不需要再处理了,也可以设置为索引),在最后需要处理完成了再重置回来。
  • 写一个数据处理函数,用索引分组后的 transform() 来应用,因为 transform()
    返回的是对每个列的处理,返回的相同形状的数据。
  • 关键是这个函数的逻辑:
  • 对 c1 不处理,直接返回
  • 如果这个无 Series 的第一个值是列表,我们就要修改数据,按以下几步: 计算我们要多少个空格
  • 将第一个值(列表),与计算后的空格拼接形成一个与原列相同长度的列表
  • 将这个列表返回,这样会覆盖到原列数据
  • 如果不是列表,只将第一个值与其他空格组成列表返回,逻辑和上述过程一样

二、使用步骤

1.引入库

代码如下(示例):

import pandas as pd
import io

2.读入数据

代码如下(示例):

data ='''
a  b         c1   c2     c3  c4
A  W      1,2,3  1,2  1,3,3  g
B  X  1,2,3,4,5    k  1,4,7  h
'''df = pd.read_csv(io.StringIO(data),sep='\s+')
df

在这里插入图片描述

# 先将有逗号的值拆分成列表:
df.map(lambda x: x.split(',') if ',' in x else x)

在这里插入图片描述

# 爆炸 c1 列,设置索引:
(df.map(lambda x: x.split(',') if ',' in x else x).explode('c1').set_index(['a', 'b'])
)

在这里插入图片描述

# 分组,按思路逻辑编写处理函数:
def func(s: pd.Series):first = s.iloc[0]if s.name == 'c1':return selif isinstance(first, list):space_len = len(s) - len(first)values = first + ['']*space_lenreturn valueselse:values = [first] + ['']*(len(s)-1)return values(df.map(lambda x: x.split(',') if ',' in x else x).explode('c1').set_index(['a', 'b']).groupby(level=[0, 1]).transform(func).reset_index()
)

在这里插入图片描述

总结

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

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

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

相关文章

Sora背后的技术《可控生成与文本到图像扩散模型》

在迅速发展的视觉生成领域中,扩散模型革命性地改变了景观,以其令人印象深刻的文本引导生成功能标志着能力的重大转变。然而,仅依赖文本来条件化这些模型并不能完全满足不同应用和场景的多样化和复杂需求。认识到这一不足,多项研究…

MSQL中DATETIME或TIMESTAMP的区别

MSQL中DATETIME或TIMESTAMP的区别 今天来聊聊 MSQL中DATETIME或TIMESTAMP以及具体细节。 两者对比 MySQL中的 DATETIME 和 TIMESTAMP 类型都用于存储日期和时间信息,但它们之间存在一些关键的区别: 范围: DATETIME 类型的值范围从1000-01-01 00:00:0…

开源推荐榜【ScottPlot 一个免费的开源 .NET 绘图库,百万数据点毫秒级绘制效率】

ScottPlot 是一个用于 C# 的开源绘图库,旨在提供简单易用的绘图功能,特别适用于科学和工程应用。它基于 .NET 平台,可以在 Windows、Linux 和 macOS 等操作系统上使用。 ScottPlot 具有以下主要特点: 简单易用:ScottPl…

17.8.1 InnoDB 启动配置

关于 InnoDB 配置的第一个决定涉及数据文件、日志文件、页面大小和内存缓冲区的配置,这些应该在初始化 InnoDB 之前配置。在初始化 InnoDB 之后修改配置可能需要一些复杂的步骤。 本节提供有关在配置文件中指定 InnoDB 设置、查看 InnoDB 初始化信息和重要存储注意…

数据结构 之 链表LinkedList

目录 1. ArrayList的缺陷: 2. 链表: 2.1 链表的概念及结构: 3. 链表的使用和模拟实现: 3.1 构造方法: 3.2 模拟实现: 4. 源码分享: 在我学习顺序表之后,我就立马开始了链表的学…

JavaScript:ES至今发展史简说

ECMAScript(简称ES)是JavaScript的标准,它的发展史经历了多个版本的迭代,以下是主要里程碑: ES1 (1997年6月):首个正式发布的ECMAScript标准,基于当时的JavaScript(由Netscape公司开…

鸿蒙开发:从入门到精通的全方位学习指南

随着华为鸿蒙HarmonyOS生态系统的迅速扩展,越来越多的开发者渴望深入了解并掌握这一前沿技术。本文旨在为鸿蒙开发新手提供一份详尽且实用的学习教程,助您从零开始,逐步迈向鸿蒙开发的巅峰。 一、鸿蒙开发环境搭建 DevEco Studio安装&#x…

非接触型红外线(IR)温度传感器 为AI NB打造更舒适工作环境

生成式AI掀起全球热潮,各大计算机厂纷纷推出AI NB/PC新品,不过AI新机也同时面临的电源相关热处理的难题,众智光电科技于今日(19号)提出最佳创新解决方案,以非接触型红外线(IR)温度感测芯片突破NB应用,能让使用者有全新体验,打造更舒适的工作环境。 在现今科技迅速发展的时代,高…

Linux报错排查-安装PHP的remi库报错

Linux运维工具-ywtool 目录 一.BC-Linux系统1.1 报错提示1.2 解决 二.CentOS/CentOS Steam系统2.1 报错提示2.2 解决 一.BC-Linux系统 测试系统用的是:BigCloud Enterprise Linux release 8.2 1.1 报错提示 [rootecs-11973640 ~/php]# yum install -y /usr/local/ywtools/r…

力扣--深度优先算法/回溯算法90.子集Ⅱ

思路分析&#xff1a; 成员变量&#xff1a; result: 用于存储最终的子集结果。path: 用于存储当前正在构建的子集。 DFS函数&#xff1a; dfs(vector<int>& nums, int start): 递归地生成子集。 从给定的start索引开始遍历数组。如果当前元素与前一个元素相同&#…

spring boot 使用 webservice

spring boot 使用 webservice 使用 java 自带的 jax-ws 依赖 如果是jdk1.8,不需要引入任何依赖&#xff0c;如果大于1.8 <dependency><groupId>javax.jws</groupId><artifactId>javax.jws-api</artifactId><version>1.1</version&g…

前端的数据标记协议

文章目录 数据标记协议是什么数据标记协议的作用常见的数据标记协议Open Graph protocol 开放图谱协议基本元数据协议可选元数据结构化属性 —— 元数据的属性多个相同的元数据标签类型元数据的使用方法全局类型使用自定义类型使用对象类型使用歌曲对象类型视频对象类型文章对象…

实现复制导入excel数据与前端导出excel

import {utils, write } from xlsx import Papa from papaparse// 获取合并头部的数据 level: 头部分有几行 function mergeHeader(worksheet, cellList, level = 3) {// 并获取 列名const colName = []for (const key of Object.keys(worksheet)) {// 根据第一行的数据if (key…

webgl instance 绘制

webgl instance 绘制 效果: key1: 创建实例缓存 function createMesh() {for (let i 0; i < NUM_CUBE; i) {const angle i * 2 * Math.PI / NUM_CUBE;const x Math.sin(angle) * RADIUS;const y 0;const z Math.cos(angle) * RADIUS;cubes[i] {scale: new THREE.V…

Rust 使 Python 函数速度提高 5000%

大家应该都听说过&#xff0c;Rust 因其卓越的性能和安全性&#xff0c;正被越来越多的科技巨头采用&#xff0c;推荐开发者使用Rust来构建关键软件。 今天&#xff0c;来深入学习一下&#xff0c;如何利用 Rust 来大幅提升你的 Python代码性能&#xff01; 寻找第N个质数&…

Node.js作用

Node.js可以开发应用 开发服务器应用 开发工具类应用 开发桌面端应用

mysql 在ubantu系统安装、命令大全以及指令没反应问题

安装 docker search mysqldocker pull mysqldocker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysqldocker exec -it mysql-test bashmysql --versionmysql Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)mysql -u root -p mys…

Linux查看磁盘命令df-h详解

df -h 是一个常用的 Linux 命令&#xff0c;用于查看文件系统的磁盘使用情况并以易于阅读的方式显示。以下是 df -h 命令的详细解释&#xff1a; -h&#xff1a;以人类可读的格式显示磁盘空间大小。例如&#xff0c;使用 GB、MB、KB 等单位代替字节。 执行 df -h 命令后&…

【webrtc】m122:PacingController 源码阅读

PacingController 关系与BitrateProber 关系更为密切PacingController 内置BitrateProber G:\CDN\signalapp_webrtc\modules\pacing\pacing_controller.hPacingControllerBitrateProber prober_;PacingController 关系与BitrateProber 关系更为密切,在整个系统中的地位也更重要…

阿里云2核4G服务器ECS规格清单、CPU性能详解和租用价格表

阿里云2核4G服务器多少钱一年&#xff1f;2核4G服务器1个月费用多少&#xff1f;2核4G服务器30元3个月、85元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…