Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Pandas数据清洗:从不规则字符串中提取数字并分组聚合_创想鸟

Pandas数据清洗:从不规则字符串中提取数字并分组聚合

Pandas数据清洗:从不规则字符串中提取数字并分组聚合

本文详细介绍了如何在Pandas DataFrame中处理包含不规则字符串和数字的列。通过利用pandas.Series.str.extract结合正则表达式,可以高效地从混合文本中提取数值,并将其转换为可计算的整数类型。教程还进一步演示了如何对提取出的数据进行分组求和,并提供了根据特定条件进行聚合的高级技巧,旨在帮助用户精确地清洗和分析非结构化数据。

问题场景:从混合文本中提取数值

在实际数据处理中,我们经常会遇到某一列数据中包含混合类型信息的情况,例如数字和文本混杂在一起,且格式不统一。一个典型的例子是销售数据,其中销售数量可能被描述为“1 table”、“3chairs”或“8 cushions”,数字与单位紧密相连,且单位词汇不固定。为了对这些销售数量进行统计分析(如按类别求和),我们首先需要将这些数字从字符串中精确地提取出来。

假设我们有以下Pandas DataFrame:

import pandas as pdimport iodata = """Category    Sales       PaidTable       1 table     YesChair       3chairs     YesCushion     8 cushions  YesTable       3Tables     YesChair       12 Chairs   NoMats        12Mats      Yes"""df = pd.read_csv(io.StringIO(data), sep=r's+')print(df)

输出:

  Category       Sales Paid0    Table     1 table  Yes1    Chair     3chairs  Yes2  Cushion  8 cushions  Yes3    Table     3Tables  Yes4    Chair    12 Chairs   No5     Mats      12Mats  Yes

我们的目标是从Sales列中提取纯数字,并按Category列进行分组求和。

解决方案:使用str.extract和正则表达式

Pandas提供了一个强大的字符串处理方法str.extract,它允许我们使用正则表达式从字符串中提取匹配的模式。

1. 提取数值

首先,我们需要定义一个正则表达式来匹配字符串开头的数字。正则表达式^(d+)的含义如下:

^:匹配字符串的开头。d+:匹配一个或多个数字(0-9)。():捕获组,表示我们想要提取这部分匹配到的内容。

我们将这个正则表达式应用于Sales列,并设置expand=False,这样str.extract会返回一个Series而不是DataFrame。

# 提取Sales列开头的数字extracted_numbers = df['Sales'].str.extract('^(d+)', expand=False)print("提取出的原始数字字符串:")print(extracted_numbers)

输出:

提取出的原始数字字符串:0     11     32     83     34    125    12Name: Sales, dtype: object

此时,提取出的数字仍然是字符串类型(dtype: object)。为了进行数学运算,我们需要将其转换为整数类型。

2. 类型转换

使用astype(int)将提取出的字符串数字转换为整数:

# 转换为整数类型numeric_sales = extracted_numbers.astype(int)print("n转换为整数后的数字:")print(numeric_sales)

输出:

转换为整数后的数字:0     11     32     83     34    125    12Name: Sales, dtype: int64

3. 分组求和

现在我们有了纯数字的numeric_sales Series,可以结合原始DataFrame的Category列进行分组求和了。

# 按Category分组求和total_sales_per_category = numeric_sales.groupby(df['Category']).sum()print("n按类别汇总的总销售额:")print(total_sales_per_category)

输出:

按类别汇总的总销售额:CategoryChair      15Cushion     8Mats       12Table       4Name: Sales, dtype: int64

高级应用:条件性分组求和

有时,我们可能需要根据额外的条件进行聚合,例如只计算“Paid”状态为“Yes”的销售额。在这种情况下,我们可以在提取数字之前先对数据进行筛选或条件性处理。

Pandas的where方法非常适合这种场景。它根据条件选择Series中的元素,不满足条件的元素会被替换为指定的值(默认为NaN)。在这里,我们将不满足“Paid”为“Yes”的Sales值替换为字符串“0”,这样在后续提取和转换时,这些项会变成数字0,而不会影响总和。

# 只计算Paid为'Yes'的销售额paid_sales_only = df['Sales'].where(df['Paid'] == 'Yes', other='0')# 对处理后的列再次提取数字并转换为整数numeric_paid_sales = paid_sales_only.str.extract('^(d+)', expand=False).astype(int)# 按Category分组求和paid_sales_per_category = numeric_paid_sales.groupby(df['Category']).sum()print("n按类别汇总的已支付销售额:")print(paid_sales_per_category)

输出:

按类别汇总的已支付销售额:CategoryChair       3Cushion     8Mats       12Table       4Name: Sales, dtype: int64

通过where(df[‘Paid’] == ‘Yes’, other=’0′)这一步,当Paid列不是’Yes’时,对应的Sales值(例如12 Chairs)会被替换为’0’。这样,在后续的str.extract和astype(int)操作中,这些项就会被正确地转换为数字0,从而只统计了已支付的销售额。

关键点与注意事项

正则表达式的精确性:str.extract的强大之处在于正则表达式。确保你的正则表达式能够准确匹配你想要提取的部分,并且不会意外匹配到不相关的内容。例如,如果数字可能出现在字符串的中间或末尾,则需要调整正则表达式。expand=False的重要性:当正则表达式只包含一个捕获组时,expand=False会使str.extract返回一个Series,这通常更便于后续操作。如果设置为True(默认值),即使只有一个捕获组,也会返回一个DataFrame。类型转换:从字符串中提取的数字默认是字符串类型。在进行任何数学运算(如求和、平均值)之前,务必使用astype(int)或astype(float)将其转换为数值类型。处理缺失值或非匹配项:如果str.extract没有找到匹配项,它会返回NaN。在尝试使用astype(int)转换时,NaN会导致错误。在实际应用中,你可能需要在使用astype之前,通过fillna()来处理这些NaN值(例如,替换为0),或者使用astype(float)(可以接受NaN),或者使用pd.to_numeric(errors=’coerce’)来将无法转换的值变为NaN。本教程中的where方法是一个有效的预处理手段,可以避免NaN的产生。

总结

本教程演示了如何利用Pandas的str.extract方法结合正则表达式,有效地从格式不一致的字符串列中提取数值。通过将提取出的数据转换为适当的数值类型,并结合groupby()进行聚合,我们可以轻松地对非结构化数据进行清洗、转换和分析。这种技术在处理日志文件、网络爬取数据或任何包含混合文本和数字的数据集时都非常有用。掌握str.extract和正则表达式将大大提升你在Pandas中处理复杂字符串数据的能力。

以上就是Pandas数据清洗:从不规则字符串中提取数字并分组聚合的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1371357.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python模块动态扩展与“猴子补丁”:原理、实践与IDE支持
上一篇 2025年12月14日 11:22:41
如何在Flask应用外部查询SQLAlchemy数据库(解决导入与上下文问题)
下一篇 2025年12月14日 11:22:45

相关推荐

  • 字节入局,AR眼镜掀起新“风口”?

    近日,关于老凤祥与字节跳动合作推出AI眼镜的消息在网络上引发热议。据相关媒体报道,老凤祥计划联合字节跳动旗下的火山引擎共同开发多款AI眼镜,并由豆包大模型提供技术支持,预计将在今年7月正式发布。 对此,6月12日,火山引擎方面进行了澄清。其负责人表示,并未有与老凤祥合作研发AI智能眼镜的计划。而豆包…

    2026年9月23日
    000
  • AdobePhotoshop的AI混合工具怎么用?掌握智能图像编辑的教程

    Photoshop的AI混合工具以生成式填充和神经网络滤镜为代表,通过语义理解实现智能图像融合。生成式填充可依据文本提示添加、移除或扩展内容,自动匹配光影与纹理;神经网络滤镜如和谐化则优化颜色与光照匹配。与传统基于像素计算的混合模式不同,AI工具理解图像内容,实现“生成并融合”。使用时需精准输入英文…

    2026年9月23日
    100
  • 解决 Conda 环境中 Java 版本冲突的策略

    本文旨在解决 Conda 环境中 Java 版本激活不正确的问题。当用户尝试在 Conda 环境中指定特定 Java 版本(如 OpenJDK 8)时,系统可能仍激活旧的或错误的 Java 版本。教程将详细分析问题根源,并提供一种通过精确指定 Java 包名来确保 Conda 环境正确管理 Java…

    2026年9月23日
    000
  • Windows安装过程中蓝屏INACCESSIBLE_BOOT_DEVICE怎么办?

    1、蓝屏“INACCESSIBLE_BOOT_DEVICE”通常因SATA模式不匹配或驱动缺失导致;2、进入BIOS将SATA模式从RAID改为AHCI可解决兼容性问题;3、安装时加载主板存储控制器驱动以识别NVMe或RAID磁盘;4、使用diskpart命令清理磁盘并转换为GPT(UEFI)或MB…

    2026年9月23日
    000
  • 谷歌为 Gemini CLI 带来扩展功能

    谷歌旗下的 AI 编程助手 Gemini CLI 最近推出了名为“扩展”的全新功能。官方表示,这一更新让用户能够“接入常用工具,并定制属于自己的 AI 命令行体验”。现在,任何开发者都可以发布扩展程序,无需经过谷歌的审核批准即可上线使用。 目前扩展库中已提供超过 50 款扩展,涵盖多种实用场景。例如…

    2026年9月23日
    000
  • 递归方法中静态变量状态管理与重置策略

    本教程探讨了在递归方法中使用静态(全局)变量时,如何正确管理和重置其状态,以避免多次调用时出现累积错误。核心问题在于静态变量在方法调用之间保留其值,导致后续调用基于旧状态进行计算。解决方案是在递归的基准情况(base case)中,在完成当前调用的计算后,立即将静态变量重置为初始值,从而确保每次独立…

    2026年9月23日
    200
  • 绘蛙AI修图怎样优化旅游照片?旅行社合作方案

    绘蛙ai修图的核心优势在于智能识别与校正,能自动调整白平衡、曝光和色彩饱和度,解决光线不佳或色彩偏差问题;2. 提供一键美化与风格化处理,内置“电影感”“清新自然”等风格,综合调整光影、对比度与锐度,提升照片视觉质感;3. 具备细节增强与瑕疵修复能力,可智能去除背景杂物、降噪、锐化,并自然修复人像瑕…

    2026年9月23日
    000
  • 谷歌浏览器如何将网页添加到阅读清单_谷歌浏览器添加网页到阅读清单方法

    谷歌浏览器支持通过地址栏按钮、右键菜单、主菜单和快捷键四种方式将网页添加到阅读清单。1、点击地址栏右侧“添加到阅读清单”图标即可保存;2、在页面空白处右键选择“添加页面到阅读清单”;3、通过三点菜单进入书签子菜单选择“添加到阅读清单”;4、使用Command+Shift+D(Mac)或Ctrl+Sh…

    2026年9月23日
    100
  • 图片库空间不足怎么办_图片库空间不足如何压缩图片详细步骤

    压缩图片可有效节省空间,推荐使用TinyPNG等在线工具批量处理,或用Photoshop、XnConvert进行精准控制,手机用户可通过专用App或快捷指令一键压缩,配合云存储与格式转换更高效。 图片库空间不足时,压缩图片是节省空间最直接有效的方法。不需要删除照片,通过合理压缩,既能保留视觉质量,又…

    2026年9月23日
    100
  • LINUX下如何安装输入法_LINUX安装中文输入法(搜狗/Fcitx)教程

    首先安装Fcitx输入法框架并切换默认输入法为Fcitx,接着添加中文语言支持并配置区域选项,然后下载并安装搜狗输入法Linux版,再通过启动应用程序设置Fcitx随系统自启,最后重启会话并在Fcitx配置中添加搜狗拼音输入法。 如果您在使用Linux系统时需要输入中文,但默认环境下缺少可用的中文输…

    2026年9月23日
    200
  • Deepseek 满血版联动 Typinator Pro,创建复杂文本模板​

    Deepseek 满血版联动 Typinator Pro,创建复杂文本模板​Deepseek 满血版联动 Typinator Pro,创建复杂文本模板​Deepseek 满血版联动 Typinator Pro,创建复杂文本模板​Deepseek 满血版联动 Typinator Pro,创建复杂文本模板​

    将 ai 与 typinator 联动可打造高效文本模板系统。1. 使用 deepseek 等 ai 工具生成结构化内容,如邮件草稿;2. 将生成内容调整为 typinator 变量格式(如 %|name%);3. 导入 typinator 并设置快捷短语,实现一键插入。典型场景包括批量写邮件、报告…

    2026年9月23日 • 用户投稿
    000
  • Java中用户输入验证:正确使用equals()或转换为整数进行比较

    本教程详细阐述了Java中用户输入字符串(如菜单选项)验证的正确方法。针对==运算符在字符串比较中的局限性,文章介绍了两种解决方案:一是使用String.equals()方法进行内容比较,二是将字符串输入解析为整数后进行数值比较。通过代码示例,帮助开发者避免常见的字符串比较错误,确保程序逻辑的健壮性…

    2026年9月23日
    000
  • VSCode精简配置Perl:语法检查、中文编码、正则调试

    vscode中perl语法检查不生效的主要原因是perl解释器路径未正确配置或缺失,解决方法是在settings.json中明确设置”perl.perlpath”指向正确的perl可执行文件;其次是因缺少cpan模块导致检查失败,需安装对应模块;此外,多个perl扩展冲突、大…

    2026年9月23日
    000
  • AO3镜像站直接访问链接_AO3镜像站推荐镜像站点

    AO3镜像站直接访问链接包括https://archiveofourown.org/、https://ao3.cubeart.club/、https://l.ao4.live、https://s.ao3l.live,用户可通过浏览器直接输入网址访问,主站无法加载时可切换镜像站点,部分支持手机浏览且无…

    2026年9月23日
    000
  • AfterEffects如何制作AI动效视频?创建动态AI视频的完整教程

    AfterEffects如何制作AI动效视频?创建动态AI视频的完整教程AfterEffects如何制作AI动效视频?创建动态AI视频的完整教程AfterEffects如何制作AI动效视频?创建动态AI视频的完整教程AfterEffects如何制作AI动效视频?创建动态AI视频的完整教程

    答案是掌握AE动画原理并融合AI素材进行创作。需根据风格选择合适AI工具(如Midjourney、RunwayML),注重素材质量、可定制性与透明背景支持;将AI素材导入AE后,调整分辨率,运用颜色校正、模糊、跟踪及表达式增强效果;通过关键帧控制位置、缩放、旋转,并应用缓动实现流畅动画;搭配契合主题…

    2026年9月23日 • 用户投稿
    200
  • 如何在Java中安装Eclipse开发环境

    先安装JDK并配置环境变量,再下载安装Eclipse IDE。1. 安装JDK:从Oracle或Eclipse Adoptium下载JDK 17/21,按提示安装,设置JAVA_HOME和PATH,用java -version验证。2. 安装Eclipse:官网下载“Eclipse IDE for …

    2026年9月23日
    000
  • 配置Linux下vim自动缩进

    从终端打开配置文件: vim ~/.vimrc 添加如下代码: set tabstop=4set softtabstop=4set shiftwidth=4set autoindentset cindentset cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1…

    2026年9月23日
    800
  • 2025 旗舰手机选购指南:四款机型精准匹配你的需求

    2025 旗舰手机选购指南:四款机型精准匹配你的需求2025 旗舰手机选购指南:四款机型精准匹配你的需求2025 旗舰手机选购指南:四款机型精准匹配你的需求2025 旗舰手机选购指南:四款机型精准匹配你的需求

    在智能手机市场持续繁荣的今天,面对琳琅满目的旗舰%ignore_a_1%,用户往往难以抉择。本文精选四款当前热门的高端手机,帮你高效锁定心仪之选。 1 五款旗舰机型推荐 1. OPPO Find X9 系列 大容量电池、护眼显示屏、双 2 亿像素影像系统——适合对续航敏感、热爱摄影以及重视视觉健康的…

    2026年9月23日 • 用户投稿
    200
  • VSCode如何实现AI辅助编程 VSCode Copilot插件的深度使用指南

    github copilot能显著提升编程效率,但需合理使用。1. 安装插件并登录github账号是基础步骤;2. 提供清晰的上下文,如规范命名和详细注释,可提高生成代码的准确性;3. 利用快捷键切换多个建议,筛选最优方案并进行修改;4. 对生成代码必须严格审查,尤其关注安全性与业务逻辑匹配度;5.…

    2026年9月23日
    100
  • 抖音ai分身怎么弄出来?抖音分身在哪里打开

    随着人工智能技术不断发展,其应用已经深入到我们日常生活的诸多领域。作为当前热门的短视频平台之一,抖音也推出了AI分身功能,让用户可以轻松创建属于自己的虚拟形象。本文将为您详细介绍抖音AI分身的操作方法,助您在抖音平台上脱颖而出! 一、了解抖音AI分身 抖音AI分身是一项基于人工智能算法打造的特效功能…

    2026年9月23日
    000

发表回复

登录后才能评论
关注微信