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 DataFrame 合并教程_创想鸟

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

基于部分匹配的 pandas dataframe 合并教程

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

在数据分析和处理中,经常会遇到需要将两个 DataFrame 基于某些关联字段进行合并的情况。但有时,关联字段并非完全一致,而是存在部分匹配的关系。例如,一个 DataFrame 的某一列包含完整的 ID 信息,而另一个 DataFrame 的某一列只包含 ID 的一部分,这时就需要采用一些技巧来实现数据的合并。

以下将通过一个具体的例子,演示如何使用 Pandas 库来实现这种基于部分匹配的 DataFrame 合并。

示例数据

假设我们有两个 DataFrame,df1 和 df2。

df1 包含主机名(Hostname)、区域(Region)和型号(Model)信息:

import pandas as pddata1 = {'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)print("DataFrame df1:n", df1)

df2 包含站点(Site)、城市(City)和州(State)信息:

data2 = {'Site': ['ABC', 'DDC'],         'City': ['NYC', 'DAL'],         'State': ['NY', 'TX']}df2 = pd.DataFrame(data2)print("nDataFrame df2:n", df2)

我们的目标是将 df1 和 df2 基于 df1[‘Hostname’] 中的部分文本(站点代码)与 df2[‘Site’] 进行匹配,最终得到一个包含所有信息的 DataFrame。

解决方案

提取站点代码:

首先,我们需要从 df1[‘Hostname’] 中提取出站点代码。假设站点代码是由 “Server” 后面的三个大写字母组成,我们可以使用正则表达式来实现:

df1['Site'] = df1['Hostname'].str.extract(r"Server([A-Z]{3})")print("nDataFrame df1 with extracted Site:n", df1)

str.extract(r”Server([A-Z]{3})”) 的作用是:

str.extract(): 用于从字符串列中提取匹配正则表达式的部分。r”Server([A-Z]{3})”: 这是一个正则表达式,用于匹配以 “Server” 开头,后跟三个大写字母的字符串。括号 () 用于捕获这三个大写字母,也就是我们需要的站点代码。

合并 DataFrame:

现在,我们已经提取出了 df1 中的站点代码,可以基于 Site 列将 df1 和 df2 进行合并。使用 pd.merge() 函数,并将 how 参数设置为 ‘left’,以保留 df1 中的所有行:

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

pd.merge(df1, df2, on=’Site’, how=’left’) 的作用是:

pd.merge(): 用于合并两个 DataFrame。on=’Site’: 指定基于 Site 列进行合并。how=’left’: 指定合并方式为左连接,即保留左侧 DataFrame (df1) 的所有行,并将右侧 DataFrame (df2) 中匹配的行添加到左侧 DataFrame。如果右侧 DataFrame 中没有匹配的行,则添加的列将填充为 NaN。

完整代码

import pandas as pd# 创建 DataFrame 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)# 创建 DataFrame df2data2 = {'Site': ['ABC', 'DDC'],         'City': ['NYC', 'DAL'],         'State': ['NY', 'TX']}df2 = pd.DataFrame(data2)# 提取站点代码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’,根据实际需求选择合适的合并方式。缺失值处理: 如果 df2 中没有与 df1 匹配的站点代码,合并后的 DataFrame 中相应的列将填充为 NaN。可以根据实际情况选择合适的缺失值处理方法,例如使用 fillna() 函数填充缺失值。

总结

本文介绍了如何使用 Pandas 库,基于部分匹配的文本数据合并 DataFrame。通过提取关键信息和灵活运用 pd.merge() 函数,可以高效地完成数据的整合。这种方法在实际数据处理中非常实用,可以解决许多复杂的数据合并问题。掌握这些技巧,能够显著提升数据分析的效率。

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

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
基于部分字符串匹配合并 Pandas DataFrames
上一篇 2025年12月14日 13:58:55
解决PySpark查询中的Column Ambiguous错误
下一篇 2025年12月14日 13:59:06

相关推荐

  • sublime怎么合并多行为一行_sublime快速合并多行文本技巧

    sublime怎么合并多行为一行_sublime快速合并多行文本技巧sublime怎么合并多行为一行_sublime快速合并多行文本技巧sublime怎么合并多行为一行_sublime快速合并多行文本技巧sublime怎么合并多行为一行_sublime快速合并多行文本技巧

    Sublime中合并多行为一行的方法包括:1. 使用Ctrl+J快捷键通过“Join Lines”功能快速合并,自动以空格连接;2. 用正则替换自定义连接符,如将r?n替换为逗号实现无空格合并;3. 安装Text Pastry插件实现高级合并,支持自定义分隔符。根据场景选择可显著提升编辑效率。 在使…

    2026年9月24日 • 用户投稿
    000
  • Java字符串处理:高效移除末尾逗号与空格的教程

    Java字符串处理:高效移除末尾逗号与空格的教程Java字符串处理:高效移除末尾逗号与空格的教程Java字符串处理:高效移除末尾逗号与空格的教程Java字符串处理:高效移除末尾逗号与空格的教程

    本教程将详细介绍如何在Java中高效、精确地移除字符串末尾的逗号、空格或其他指定分隔符。我们将探讨使用String.replaceAll()方法结合正则表达式的强大功能,以解决传统replace()方法无法精准定位末尾字符的问题,并提供多种场景下的示例代码与注意事项。 1. 引言:字符串清理的常见挑…

    2026年9月24日 • 用户投稿
    100
  • Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分

    Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分

    本文旨在解决 Java 中使用正则表达式进行字符串替换时,如何避免过度匹配,实现对特定字符串的精准替换。通过使用单词边界 ,我们可以确保只替换独立的 $c 字符串,而不会影响到 $c_new 等包含 $c 的其他字符串。本文将提供详细的代码示例和解释,帮助开发者掌握这一技巧。 在 Java 中,使用…

    2026年9月24日 • 用户投稿
    1000
  • Java正则表达式:利用词边界实现精确的非贪婪字符串替换

    Java正则表达式:利用词边界实现精确的非贪婪字符串替换Java正则表达式:利用词边界实现精确的非贪婪字符串替换Java正则表达式:利用词边界实现精确的非贪婪字符串替换Java正则表达式:利用词边界实现精确的非贪婪字符串替换

    本教程探讨如何在Java中使用正则表达式精确替换字符串中的特定部分,特别是在目标字符串不应消耗后续字符的场景。通过分析常见错误,文章详细介绍了词边界的原理与应用,展示了如何利用它实现非贪婪且不破坏原字符串结构的替换,确保匹配的精确性与替换结果的完整性。 在处理字符串替换时,我们经常面临需要精确匹配特…

    2026年9月24日 • 用户投稿
    700
  • 使用正则表达式从JSON数组中提取JSON对象

    本文旨在提供一种使用Java正则表达式从包含多个JSON对象的JSON数组中提取单个JSON对象的方法。我们将详细介绍如何构建合适的正则表达式,并提供示例代码演示如何在Java中使用该表达式来实现JSON对象的提取,并对提取后的字符串进行优化处理,移除不必要的空白字符。 从JSON数组中提取JSON…

    2026年9月24日
    000
  • Java中固定长度用户ID输入验证:解决int类型长度检查问题

    本文详细介绍了在Java程序中如何实现用户输入固定长度ID的验证机制。针对常见的int cannot be dereferenced错误,我们将探讨将ID作为字符串读取并进行长度及格式校验的最佳实践,并提供处理字母数字型和纯数字型ID的示例代码,确保数据输入的准确性和程序的健壮性。 引言:用户输入验…

    2026年9月24日
    500
  • 数据实时迁移同步工具 CloudCanal v5.2.0.0 发布,支持 SaaS 全托管

    cloudcanal 免费社区版 是 clougence 公司推出的一款全自研、可视化、自动化数据迁移同步工具,具备 结构迁移、数据迁移、数据同步、数据校验、数据订正 等功能,支持 60+ 款流行关系型数据库、实时数仓、消息中间件、缓存数据库和搜索引擎之间数据互通,其中包含国产数据库 oceanba…

    2026年9月24日
    100
  • 使用正则表达式实现字符串大小写不敏感替换

    本文将介绍如何利用正则表达式,高效、简洁地实现字符串中特定单词的大小写不敏感替换,从而将所有形式的单词统一转换为指定大小写。通过运用正则表达式的“不区分大小写”模式,可以避免为每种大小写变体编写单独的替换条件,极大提升代码的简洁性和可维护性。 在编程实践中,我们经常会遇到需要将字符串中某个单词的所有…

    2026年9月23日
    600
  • Java中利用正则表达式高效提取JSON数组中的独立对象

    本文探讨了如何使用Java的Pattern和Matcher配合正则表达式,从格式化的JSON数组字符串中精确提取出每个独立的JSON对象字符串。文章详细解析了核心正则表达式的工作原理及其对格式的依赖性,并提供了完整的Java代码示例,同时强调了在实际应用中处理JSON的注意事项和更健壮的替代方案。 …

    2026年9月23日
    600
  • Java中利用正则表达式从JSON数组中提取独立JSON对象

    本文详细介绍了如何利用Java正则表达式从格式化的JSON数组中提取独立的JSON对象字符串。通过一个具体的代码示例,文章展示了如何构建一个精确的正则表达式模式来匹配并分离数组中的每个JSON实体,并提供了Java代码实现,包括去除多余空白字符的步骤,最终实现将JSON数组解析为可操作的独立对象字符…

    2026年9月23日
    200
  • Java JSON字符串有效性验证:基于栈的实现与常见陷阱

    本文深入探讨了使用Java栈结构验证JSON字符串有效性的方法。通过分析一个常见错误示例,详细阐述了在处理括号、方括号以及字符串引号时的正确逻辑,特别强调了字符串内部字符(包括转义字符)不应影响结构平衡的原则,并提供了改进思路,旨在帮助开发者构建健壮的JSON验证器。 JSON结构与栈的适用性 JS…

    2026年9月23日
    100
  • Meeseeks— 美团开源的模型指令遵循能力评测集

    Meeseeks— 美团开源的模型指令遵循能力评测集Meeseeks— 美团开源的模型指令遵循能力评测集Meeseeks— 美团开源的模型指令遵循能力评测集Meeseeks— 美团开源的模型指令遵循能力评测集

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ AGI-Eval评测社区 AI大模型评测社区 63 查看详情 Meeseeks是什么 meeseeks 是由美团 m17 团队推出的开源大模型评测基准,专注于评估模型在指令遵循方面的能力。该评测…

    2026年9月22日 • 用户投稿
    300
  • React中动态导入图片:require.context 的高效实践

    React中动态导入图片:require.context 的高效实践React中动态导入图片:require.context 的高效实践React中动态导入图片:require.context 的高效实践React中动态导入图片:require.context 的高效实践

    在React组件中,直接使用变量进行动态图片导入(如import(variable)或require(variable))通常会因构建工具的静态分析限制而失败。本文将深入探讨这一常见问题,并详细介绍如何利用Webpack的require.context功能,实现对图片资源的灵活、批量导入与管理,从而…

    2026年9月22日 • 用户投稿
    300
  • 使用正则表达式检测字符串中的除零操作

    本文详细介绍了如何使用正则表达式精确检测字符串中潜在的除零操作。针对表达式中可能存在的变量引用(如<>)、数字、多余空格以及禁止包含引号等复杂情况,文章提供了一个高效的正则表达式模式,并深入解析其构成原理。通过具体的Java代码示例,读者将学习如何将此模式应用于实际编程场景,从而有效识别…

    2026年9月21日
    100
  • Java 正则表达式:查找双引号内所有指定字符串的出现次数

    本文旨在解决在 Java 中使用正则表达式查找双引号内特定字符串(例如 “variant”)的所有出现次数的问题。我们将提供一个完整的解决方案,包括正则表达式的构建、代码示例以及详细的解释,帮助开发者准确高效地完成此类任务。 在 Java 中,使用正则表达式查找字符串中特定模…

    2026年9月21日
    000
  • PHP错误日志怎么查看_PHP错误日志定位与查看方法

    要查看PHP错误日志,首先确定php.ini中error_log路径,若未设置则检查Web服务器(如Apache/Nginx)错误日志;确保log_errors=On、error_reporting合理配置,并通过tail、grep等工具分析日志,结合框架日志和系统日志(如syslog)全面定位问题…

    2026年9月21日
    300
  • Linux查看系统日志的常用命令

    答案是查看Linux日志需综合使用journalctl、dmesg、tail、grep等工具。journalctl用于systemd系统集中查询服务及内核日志,支持时间、优先级、字段等多维度过滤;dmesg专注内核启动与硬件问题;tail -f实时监控日志动态;cat、grep、less结合正则和管…

    用户投稿 2026年9月21日
    100
  • Linux如何查看sudo执行的历史记录

    Linux如何查看sudo执行的历史记录Linux如何查看sudo执行的历史记录Linux如何查看sudo执行的历史记录Linux如何查看sudo执行的历史记录

    要追溯sudo执行的命令,需查看系统日志或配置sudo日志;在Ubuntu/Debian中查/var/log/auth.log,CentOS/RHEL中查/var/log/secure,或使用journalctl _COMM=sudo筛选;通过配置/etc/sudoers中的Defaults log…

    2026年9月21日 • 用户投稿
    300
  • Java从文本文件随机读取多行连续内容的教程

    本教程旨在指导java开发者如何高效地从文本文件中随机读取并打印指定数量(例如5行)的连续内容,尤其适用于处理结构化文本块(如诗歌)。我们将探讨如何避免仅读取文件开头固定行数的局限,通过将文件内容一次性加载到内存并结合随机数生成器来精确选取所需的文本块,从而实现真正的随机性与灵活性。 引言与问题分析…

    2026年9月20日
    200
  • VSCode的侧边栏图标代表什么?

    资源管理器(文件夹图标)用于管理项目文件结构,支持新建、重命名、删除和拖拽操作;2. 搜索(放大镜图标)实现全局文本查找与替换,支持正则表达式及范围筛选;3. 源代码管理(分支图标)集成Git功能,可查看变更、提交代码并同步远程仓库;4. 运行和调试(虫子图标)支持断点调试、变量监控及多语言启动配置…

    2026年9月20日
    000

发表回复

登录后才能评论
关注微信