当前位置:

首页 > 编程开发 > Pandas高效拼接文本与提取数值教程

Pandas高效拼接文本与提取数值教程

本文将深入探讨在PandasDataFrame中,如何高效地将固定文本与从现有列中通过正则表达式提取的动态数值进行拼接。我们将详细介绍并对比使用Series.str访问器、str.extract以及str.replace这三种核心方法,以帮助用户根据具体场景选择最合适的策略,实现灵活且强大的数据处理。

本文目录

    Pandas DataFrame中高效拼接文本与提取数值的教程

    本文将深入探讨在Pandas DataFrame中,如何高效地将固定文本与从现有列中通过正则表达式提取的动态数值进行拼接。我们将详细介绍并对比使用Series.str访问器、str.extract以及str.replace这三种核心方法,以帮助用户根据具体场景选择最合适的策略,实现灵活且强大的数据处理。

    在数据分析和预处理过程中,我们经常会遇到需要从某一文本列中提取特定信息(例如数字),并将其与预设的静态文本组合,生成一个新的描述性列。例如,将“P”与提取的第一个数字、空格、“Stufe”与提取的第二个数字拼接起来,形成如“P8 Stufe 4”这样的格式。直接进行字符串拼接时,如果提取结果是列表形式,需要特别注意如何正确访问列表中的元素。

    场景描述与初始数据准备

    假设我们有一个Pandas DataFrame,其中包含一列PROJEKT[BEZEICHNUNG],其内容是包含数字的字符串。我们的目标是从这些字符串中提取出两个数字,并将它们与固定文本“P”和“ Stufe ”组合成一个新的列EINGRUPPIERUNG。

    首先,我们模拟一些示例数据:

    import pandas as pd
    import re
    
    # 示例数据
    data = {
        'PROJEKT[BEZEICHNUNG]': [
            'blah 8 blah 4',
            'another 8 text 5',
            'item 8 version 5',
            'project 8 code 4',
            'group 7 level 4'
        ]
    }
    df = pd.DataFrame(data)
    print("原始DataFrame:")
    print(df)

    输出:

    原始DataFrame:
      PROJEKT[BEZEICHNUNG]
    0        blah 8 blah 4
    1     another 8 text 5
    2     item 8 version 5
    3     project 8 code 4
    4      group 7 level 4

    如果直接使用str.findall(r'\d+'),我们会得到一个Series,其中每个元素是一个包含所有匹配数字的列表:

    match_lists = df['PROJEKT[BEZEICHNUNG]'].str.findall(r'\d+')
    print("\n使用str.findall提取的数字列表:")
    print(match_lists)

    输出:

    使用str.findall提取的数字列表:
    0    [8, 4]
    1    [8, 5]
    2    [8, 5]
    3    [8, 4]
    4    [7, 4]
    Name: PROJEKT[BEZEICHNUNG], dtype: object

    直接尝试像df["EINGRUPPIERUNG"]="P",match_lists[:][0], ...这样的操作是无效的,因为它混淆了Series操作和Python列表操作。正确的做法是利用Pandas的str访问器。

    方法一:利用 str 访问器处理列表元素

    当str.findall返回一个包含列表的Series时,我们可以利用Series.str访问器来进一步操作这些列表中的元素。Series.str[index]允许我们按索引访问每个列表中的特定元素。

    # 提取所有匹配的数字列表
    match = df['PROJEKT[BEZEICHNUNG]'].str.findall(r'\d+')
    
    # 使用str访问器获取列表的第一个和第二个元素
    # 注意:这里假设每个列表至少包含两个数字
    df['EINGRUPPIERUNG_Method1'] = 'P' + match.str[0] + ' Stufe ' + match.str[1]
    
    print("\n方法一结果(使用str访问器):")
    print(df[['PROJEKT[BEZEICHNUNG]', 'EINGRUPPIERUNG_Method1']])

    输出:

    方法一结果(使用str访问器):
      PROJEKT[BEZEICHNUNG] EINGRUPPIERUNG_Method1
    0        blah 8 blah 4               P8 Stufe 4
    1     another 8 text 5               P8 Stufe 5
    2     item 8 version 5               P8 Stufe 5
    3     project 8 code 4               P8 Stufe 4
    4      group 7 level 4               P7 Stufe 4

    注意事项:

    • 此方法要求str.findall返回的每个列表都包含足够多的元素,否则访问match.str[index]时可能会引发IndexError。在实际应用中,如果数字数量不确定,需要进行错误处理或预先过滤。
    • 适用于当你需要先获取所有匹配项的列表,再从中选择特定项的场景。

    方法二:使用 str.extract 进行结构化提取

    str.extract是Pandas中一个非常强大的方法,专门用于通过正则表达式的捕获组(capturing groups)来提取结构化数据。它直接返回一个DataFrame,其中每个捕获组对应一列。这使得后续的拼接操作变得非常简洁和直观。

    # 使用str.extract提取两个数字
    # 正则表达式 r'(\d+).*(\d+)' 捕获第一个和第二个数字
    # expand=True 是默认值,表示返回DataFrame
    match_df = df['PROJEKT[BEZEICHNUNG]'].str.extract(r'(\d+).*(\d+)', expand=True)
    
    # 将提取的列与固定文本拼接
    df['EINGRUPPIERUNG_Method2'] = 'P' + match_df[0] + ' Stufe ' + match_df[1]
    
    print("\n方法二结果(使用str.extract):")
    print(df[['PROJEKT[BEZEICHNUNG]', 'EINGRUPPIERUNG_Method2']])

    输出:

    方法二结果(使用str.extract):
      PROJEKT[BEZEICHNUNG] EINGRUPPIERUNG_Method2
    0        blah 8 blah 4               P8 Stufe 4
    1     another 8 text 5               P8 Stufe 5
    2     item 8 version 5               P8 Stufe 5
    3     project 8 code 4               P8 Stufe 4
    4      group 7 level 4               P7 Stufe 4

    注意事项:

    • str.extract要求正则表达式中至少有一个捕获组。
    • 如果正则表达式没有匹配到任何内容,对应的列将包含NaN。
    • 此方法在提取多个结构化数据时表现优秀,代码可读性高。

    方法三:利用 str.replace 进行模式替换

    str.replace方法结合正则表达式的捕获组,可以直接将原始字符串转换为目标格式。通过在替换字符串中使用\1, \2等反向引用(backreferences),可以引用正则表达式中捕获组的内容。

    # 使用str.replace和反向引用进行模式替换
    df['EINGRUPPIERUNG_Method3'] = df['PROJEKT[BEZEICHNUNG]'].str.replace(
        r'.*(\d+).*(\d+).*',  # 匹配整个字符串,并捕获两个数字
        r'P\1 Stufe \2',      # 使用捕获的数字进行替换
        regex=True            # 必须设置为True以启用正则表达式替换
    )
    
    print("\n方法三结果(使用str.replace):")
    print(df[['PROJEKT[BEZEICHNUNG]', 'EINGRUPPIERUNG_Method3']])

    输出:

    方法三结果(使用str.replace):
      PROJEKT[BEZEICHNUNG] EINGRUPPIERUNG_Method3
    0        blah 8 blah 4               P8 Stufe 4
    1     another 8 text 5               P8 Stufe 5
    2     item 8 version 5               P8 Stufe 5
    3     project 8 code 4               P8 Stufe 4
    4      group 7 level 4               P7 Stufe 4

    注意事项:

    • regex=True是启用正则表达式替换的关键。
    • 如果正则表达式没有匹配到整个字符串,原始字符串将保持不变。确保正则表达式能够覆盖所有需要转换的情况。
    • 此方法在需要一步到位地完成提取和格式化时非常高效和简洁。

    选择建议与总结

    这三种方法各有优势,适用于不同的场景:

    1. Series.str访问器 (match.str[0]等):

      • 适用场景: 当你已经通过str.findall获取了所有匹配项的列表,并且需要从这些列表中精确选择特定索引的元素时。
      • 优点: 直观地处理列表中的元素。
      • 缺点: 需要确保列表长度,否则可能出错;如果匹配项数量不固定,处理会比较复杂。
    2. str.extract:

      • 适用场景: 当你需要从字符串中提取多个结构化的数据片段,并将它们作为独立的列进行处理时。
      • 优点: 返回DataFrame,结构清晰,便于后续操作;正则表达式捕获组直接对应列,代码可读性好。
      • 缺点: 如果只有一个捕获组,返回的是Series,需要注意类型转换。
    3. str.replace (结合反向引用):

      • 适用场景: 当你希望一步到位地将原始字符串转换为新的格式,其中新格式的内容是原始字符串中提取出的部分时。
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    GitHub六个AI开源项目能做什么?软件理解、语音与求职场景
    GitHub六个AI开源项目能做什么?软件理解、语音与求职场景

    解析六个GitHub AI开源项目的具体用途,包括软件静态分析、智能体回答检查、多语言配音、求职材料生成、本地代码检索及动态歌词展示,帮助开发者根据实际需求筛选工具并正确验证结果。

    opencode安装skills教程及本地配置方法
    opencode安装skills教程及本地配置方法

    遇到OpenCode Skills无法加载或配置无效?本文手把手教你完成Skills的安装、环境变量设置及本地调试,避开常见坑点,让AI助手更懂你的代码习惯。

    如何开启Visual Studio2022实时代码分析警告提示
    如何开启Visual Studio2022实时代码分析警告提示

    解决 Visual Studio 2022 编辑时不显示代码分析警告的问题。指南涵盖 .NET 项目实时分析设置、Roslyn 分析器范围调整及错误列表来源筛选,确保开发者能高效利用实时代码诊断功能。

    如何在Visual Studio2022查看变量监视窗口调试程序
    如何在Visual Studio2022查看变量监视窗口调试程序

    详解 Visual Studio 2022 调试技巧:包括断点设置、监视窗口开启方法、变量添加步骤以及通过 F10 单步执行观察变量值变化的全过程。

    Visual Studio2017设置默认编码为UTF-8不带BOM
    Visual Studio2017设置默认编码为UTF-8不带BOM

    针对 Visual Studio 2017 缺乏全局默认编码选项的情况,详解如何利用 .editorconfig 设定项目级 UTF-8 无 BOM 规则,以及手动转换现有文件并校验字节的方法。

    Visual Studio2022F5调试提示启动项目未配置怎么修复
    Visual Studio2022F5调试提示启动项目未配置怎么修复

    解决 Visual Studio 2022 F5 调试报错问题,通过设置启动项目、检查解决方案属性及正确区分类库与应用项目,快速恢复调试功能。

    Visual Studio2022NuGet包还原失败离线处理方案
    Visual Studio2022NuGet包还原失败离线处理方案

    解决Visual Studio 2022离线环境中NuGet包还原失败的难题,涵盖依赖链分析、本地源配置、包集收集及隔离验证步骤,帮助开发者构建稳定的离线开发环境。

    Visual Studio2017大项目加载缓慢,优化加载性能技巧
    Visual Studio2017大项目加载缓慢,优化加载性能技巧

    解决Visual Studio 2017大型项目加载慢的实用指南。涵盖性能监测、扩展管理、文档恢复优化及版本兼容性检查,帮助开发者精准定位瓶颈并提升工作效率。

    Visual Studio2022设置多启动项目同时调试运行
    Visual Studio2022设置多启动项目同时调试运行

    详解 Visual Studio 2022 多启动项目配置方法,包括启动动作选择、顺序调整及调试技巧,帮助开发者高效调试分布式或前后端分离应用。

    fastapi下载文件接口实现教程
    fastapi下载文件接口实现教程

    深入解析在FastAPI框架中实现文件下载接口的完整方案,涵盖基于FileResponse的本地静态文件传输、基于StreamingResponse的分块流式传输、RFC 5987中文文件名编码规范、路径穿越安全防御及BackgroundTasks临时文件清理,并配备详细代码示例与架构解析图。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。