基于部分字符串匹配合并 Pandas DataFrames

基于部分字符串匹配合并 pandas dataframes

本文介绍如何基于一个 DataFrame 列中的部分文本与另一个 DataFrame 列进行匹配,并使用 Pandas 实现高效合并。我们将通过提取目标字符串,创建新的匹配列,最终完成两个 DataFrame 的合并操作,并提供详细的代码示例和注意事项。

问题背景

在数据处理中,经常会遇到需要合并两个 DataFrame 的情况,但标准的 pd.merge 函数要求两个 DataFrame 具有完全匹配的列。当一个 DataFrame 的列值包含另一个 DataFrame 列值的部分文本时,直接使用 pd.merge 无法达到预期效果。本文将提供一种解决方案,通过提取关键文本并创建新的列,实现基于部分字符串匹配的 DataFrame 合并。

解决方案

该方案的核心思想是:

从包含部分文本的 DataFrame (df1) 中,提取出与另一个 DataFrame (df2) 匹配的关键文本。将提取出的文本作为新的一列添加到 df1 中。使用新创建的列作为连接键,将 df1 和 df2 进行合并。

代码实现

假设我们有两个 DataFrame,df1 和 df2,它们的数据结构如下:

import pandas as pd# df1data1 = {'Hostname': ['ServerABC101', 'ServerABC102', 'ServerDDC103', 'ServerDDC609', 'ServerDDC103', 'ServerDDC609'],         'Region': ['US', 'US', 'PAC', 'Emea', 'PAC', 'Emea'],         'Model': ['Cisco', 'Cisco', 'Intel', 'Intel', 'Intel', 'Intel']}df1 = pd.DataFrame(data1)# df2data2 = {'Site': ['ABC', 'DDC'],         'City': ['NYC', 'DAL'],         'State': ['NY', 'TX']}df2 = pd.DataFrame(data2)print("df1:")print(df1)print("ndf2:")print(df2)

我们的目标是基于 df2[‘Site’] 中的文本与 df1[‘Hostname’] 中的部分文本匹配,将 df1 和 df2 合并。假设 df1[‘Hostname’] 中包含 “Server” 之后的三位大写字母代表 df2[‘Site’] 的值。

首先,使用正则表达式从 df1[‘Hostname’] 中提取 Site 代码:

df1['Site'] = df1['Hostname'].str.extract(r"Server([A-Z]{3})")print("ndf1 after extracting Site:")print(df1)

这里,str.extract(r”Server([A-Z]{3})”) 使用正则表达式 Server([A-Z]{3}) 从 Hostname 列中提取匹配 “Server” 后面的三个大写字母。提取的结果将作为新的 ‘Site’ 列添加到 df1 中。

接下来,使用 pd.merge 函数,基于新创建的 ‘Site’ 列将 df1 和 df2 进行合并:

df1 = pd.merge(df1, df2, on='Site', how='left')print("nFinal merged df1:")print(df1)

how=’left’ 参数指定使用左连接,即保留 df1 中的所有行,并将 df2 中匹配的行添加到 df1 中。 如果df1中的Site在df2中没有匹配项,则City和State列将填充NaN。

完整代码示例

import pandas as pd# df1data1 = {'Hostname': ['ServerABC101', 'ServerABC102', 'ServerDDC103', 'ServerDDC609', 'ServerDDC103', 'ServerDDC609'],         'Region': ['US', 'US', 'PAC', 'Emea', 'PAC', 'Emea'],         'Model': ['Cisco', 'Cisco', 'Intel', 'Intel', 'Intel', 'Intel']}df1 = pd.DataFrame(data1)# df2data2 = {'Site': ['ABC', 'DDC'],         'City': ['NYC', 'DAL'],         'State': ['NY', 'TX']}df2 = pd.DataFrame(data2)# 提取 Site 代码df1['Site'] = df1['Hostname'].str.extract(r"Server([A-Z]{3})")# 合并 DataFramedf1 = pd.merge(df1, df2, on='Site', how='left')print(df1)

注意事项

正则表达式: 正确选择和编写正则表达式至关重要。正则表达式需要准确匹配目标文本,避免提取错误的数据。连接类型: how 参数决定了连接的类型。根据实际需求选择合适的连接类型,例如 left、right、inner、outer。缺失值处理: 如果在 df1 中提取的 Site 代码在 df2 中不存在,合并后的 City 和 State 列将会出现缺失值(NaN)。需要根据实际情况处理这些缺失值,例如填充默认值或删除包含缺失值的行。性能优化: 对于大型 DataFrame,使用矢量化操作(如 str.extract)通常比循环遍历更高效。错误处理: 确保代码能够处理 Hostname 列中不包含 “Server” 加上三个大写字母的情况,避免程序崩溃。 可以使用 .fillna() 方法为这些情况设置默认值,或者使用条件语句跳过这些行。

总结

本文介绍了一种基于部分字符串匹配合并 Pandas DataFrames 的方法。通过提取关键文本并创建新的列,我们可以灵活地处理不完全匹配的连接情况。在实际应用中,需要根据具体的数据结构和业务需求,选择合适的正则表达式和连接类型,并注意处理可能出现的缺失值。

以上就是基于部分字符串匹配合并 Pandas DataFrames的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 13:58:52
下一篇 2025年12月14日 13:59:00

相关推荐

  • 基于部分匹配的 Pandas DataFrame 合并教程

    本文旨在介绍如何使用 Pandas 库,基于一个 DataFrame 列中的部分文本匹配另一个 DataFrame 的列,从而实现高效的数据合并。通过提取关键信息并进行连接,最终得到包含完整信息的目标 DataFrame。本文将提供详细的代码示例和步骤说明,帮助读者掌握这种常用的数据处理技巧。 在数…

    好文分享 2025年12月14日
    000
  • Flask API 日志过滤:通过白名单机制优化请求日志管理

    本文详细介绍了如何在 Flask API 中通过实现自定义 WSGI 请求处理器,利用白名单机制过滤不必要的请求日志,从而有效应对日志被垃圾请求淹没的问题。文章着重讲解了动态获取 API 路由端点、正确配置日志过滤逻辑以及解决初始化时序问题的关键步骤,并探讨了在生产环境中可能遇到的挑战及替代方案。 …

    2025年12月14日
    000
  • Python教程:将机器故障日志文件解析为结构化嵌套字典

    本教程旨在指导如何将非结构化的机器故障与解决方案文本数据,高效地解析并组织成Python中的嵌套字典。核心方法是首先优化原始文本文件的结构,将每个机器-故障-解决方案组独立化,然后利用Python的文件读取和字符串分割技术,将数据准确映射到期望的字典结构中,从而实现数据的结构化存储与便捷访问。 原始…

    2025年12月14日
    000
  • 使用 Polars 高效加载多文件并进行自定义处理

    本文将详细介绍如何利用 Polars 的惰性计算(LazyFrame)和并行处理能力,高效地加载多个具有相同结构的 CSV 文件,并在合并之前为每个文件添加一个基于文件名的自定义列(例如产品代码)。通过结合 scan_csv 和 concat 方法,可以在处理大量文件时保持高性能和灵活性。 引言:多…

    2025年12月14日
    000
  • Python教程:从半结构化文本中高效提取并构建嵌套字典

    本文详细介绍了如何将包含机器故障和解决方案的半结构化文本文件解析成一个多层嵌套的Python字典。通过优化原始数据格式,使得每个机器、故障和解决方案组清晰独立,配合Python的分块读取和迭代处理逻辑,能够高效准确地构建出以机器名为顶级键,故障描述为二级键,解决方案列表为值的结构化数据。 1. 引言…

    2025年12月14日
    000
  • 使用 Polars 高效加载多文件并添加自定义元数据列的教程

    本教程详细介绍了如何利用 Polars 的惰性计算(LazyFrame)功能,高效地加载多个结构相似的 CSV 文件,并在合并数据时为每个文件动态添加一个包含其来源信息(如产品代码)的自定义列。通过结合 scan_csv、with_columns 和 concat 操作,您可以实现并行处理和优化的内…

    2025年12月14日
    000
  • 解析半结构化文本数据:构建嵌套字典的Python教程

    本教程旨在指导如何将包含机器、故障和解决方案的半结构化文本数据解析为嵌套的Python字典。核心方法是优化原始数据格式,通过重复机器名称简化解析逻辑,并利用Python的文件操作和字符串处理功能,高效地构建出以机器名为键、故障为子键、解决方案列表为值的层级字典结构。 在日常的数据处理任务中,我们经常…

    2025年12月14日
    000
  • Python教程:从文本文件中移除 ‘ ‘ 字符

    本文将介绍如何使用Python从文本文件中移除转义字符 ‘t’。通过 re 模块的 sub 函数,结合文件读取操作,我们将演示如何正确地替换文件中的 ‘t’ 字符,并分析可能遇到的问题及解决方案。关键在于理解文本文件中的转义字符与实际制表符的区别,并采…

    2025年12月14日
    000
  • Pandas数据框列处理:条件判断与字符串拆分重构教程

    本教程详细介绍了如何在Pandas DataFrame中根据特定关键词对字符串列进行条件性处理。我们将学习如何编写一个自定义函数,利用apply()方法在字符串包含特定子串时进行拆分、提取和重构,同时确保不包含该子串的行保持不变,从而实现精确的数据清洗和格式化。 在数据分析和处理中,我们经常需要对d…

    2025年12月14日
    000
  • Pandas DataFrame中基于条件拆分字符串并重新拼接的教程

    本教程将指导如何在Pandas DataFrame中,根据列中字符串是否包含特定子串,有条件地进行拆分、处理和重新拼接。我们将探讨直接字符串操作可能遇到的问题,并提供一个健壮的解决方案,以确保只有符合条件的行才被修改,从而实现精确的数据清洗和格式化。 1. 问题描述 在数据处理过程中,我们经常需要对…

    2025年12月14日
    000
  • Python Pandas:DataFrame 列的条件性字符串拆分与拼接技巧

    本文探讨了在Pandas DataFrame中如何根据列值是否包含特定词语来执行条件性的字符串操作。通过一个实际的地址数据处理场景,详细介绍了如何利用自定义函数结合apply()方法,实现字符串的条件性拆分、清理和重构,避免了不必要的修改,确保数据转换的精确性和灵活性。 1. 引言:DataFram…

    2025年12月14日
    000
  • 优化 humanize.naturalsize() 输出:去除冗余小数位

    本文探讨了如何在使用 humanize.naturalsize() 函数时,去除由固定格式(如 %.2f)导致的冗余小数位零,实现更简洁的输出。通过结合正则表达式对 humanize 的输出进行后处理,我们可以有效地将 1.00M 转换为 1M,同时保留 1.01M 等非零小数位,从而提升数据可读性…

    2025年12月14日
    000
  • 优化Python humanize.naturalsize()输出:移除尾随零

    本文探讨了如何解决Python humanize.naturalsize()函数在使用固定精度格式化时可能产生的尾随零问题。通过引入一个自定义的后处理函数,结合正则表达式re.sub(r”.0+(?=D)”, “”, n),我们能够智能地移除诸如&#8…

    2025年12月14日
    000
  • Python 字符串切片问题排查与优化:更优雅的命令行参数解析方案

    本文旨在解决Python字符串切片时可能出现的错误,并提供一种更简洁、高效的命令行参数解析方法。通过re模块和字符串分割,可以轻松提取命令中的数字参数,避免复杂的切片操作和潜在的索引错误,提升代码的可读性和健壮性。 问题分析与传统解决方案的局限性 在处理类似命令行指令的字符串时,开发者常常需要提取其…

    2025年12月14日
    000
  • Python 字符串切片问题排查与优化:一种更灵活的解决方案

    本文旨在帮助Python初学者理解和解决字符串切片时可能遇到的问题,并提供一种更灵活的解决方案。通过使用`re`库和字符串分割方法,可以从包含命令和参数的字符串中提取数字,即使参数顺序不固定也能正确解析。文章将详细解释代码逻辑,并提供示例,帮助读者掌握这种方法。### 问题分析在处理用户输入的命令字…

    2025年12月14日
    000
  • Python 字符串切片问题排查与优化:使用正则表达式提取命令参数

    本文旨在帮助初学者解决在Python中使用字符串切片提取命令参数时遇到的问题,并提供一种更健壮、更灵活的解决方案。通过引入正则表达式,我们可以更准确地提取命令中的数字参数,即使参数的顺序或格式发生变化。 问题分析 原始代码尝试通过固定的索引位置来提取命令字符串中的数字参数,这种方法存在以下几个问题:…

    2025年12月14日
    000
  • 如何利用字典为Pandas DataFrame添加基于子字符串匹配的分类列

    本文详细介绍了如何使用Python的Pandas库,结合字典对DataFrame中的文本列进行分类。当字典的键是DataFrame列中字符串的子集时,传统的map方法无法直接应用。本教程通过apply方法与自定义的lambda函数,演示了如何高效地识别并分配类别,确保即使面对部分匹配的复杂情况也能准…

    2025年12月14日
    000
  • 使用Python Pandas通过字典实现DataFrame列的模糊分类

    本文将详细介绍如何利用Python Pandas库,结合字典和apply函数,为DataFrame添加基于子字符串匹配的分类列。当DataFrame的原始数据项并非字典键的精确匹配,而是包含字典键作为子字符串时,传统的map方法会失效。本教程将提供一种高效且灵活的解决方案,通过自定义匹配逻辑实现动态…

    2025年12月14日
    000
  • 如何在Pandas DataFrame中利用字典和子字符串匹配添加分类列

    本教程旨在解决如何在Pandas DataFrame中,根据一个包含关键词-类别映射的字典,为现有列动态添加一个分类列。当字典中的键是DataFrame列值中的子字符串时,直接使用map函数无法满足需求。我们将详细讲解如何利用apply函数结合自定义的lambda表达式,实现高效且灵活的子字符串匹配…

    2025年12月14日
    000
  • 使用字典为Pandas DataFrame添加分类列:处理子字符串匹配

    本教程详细介绍了如何利用Python字典为Pandas DataFrame添加一个分类列。当字典的键是DataFrame中目标列文本的子字符串时,传统map方法不再适用。文章将展示如何结合使用apply方法与自定义lambda函数,高效地实现基于子字符串匹配的分类,并提供完整的代码示例及注意事项,确…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信