基于部分匹配的 Pandas DataFrame 合并:提取与合并技巧

霞舞
发布: 2025-09-28 19:22:00
原创
650人浏览过

基于部分匹配的 pandas dataframe 合并:提取与合并技巧

本文旨在介绍如何使用 Pandas 库,在两个 DataFrame 中,当一个 DataFrame 的列包含另一个 DataFrame 列的部分文本时,实现高效的数据合并。通过正则表达式提取关键信息,并结合 Pandas 的 merge 函数,提供了一种灵活且强大的数据处理方法。

在数据分析工作中,经常会遇到需要合并两个 DataFrame 的情况。但有时,两个 DataFrame 之间没有完全匹配的列,而是存在部分匹配的关系。例如,一个 DataFrame 的某一列包含另一个 DataFrame 列的部分文本信息。针对这种情况,我们可以使用 Pandas 结合正则表达式来提取关键信息,然后进行合并。

以下是一个详细的步骤指南,展示如何使用 Pandas 来完成这个任务。

1. 数据准备

首先,我们需要创建两个示例 DataFrame,模拟实际场景中的数据结构。

import pandas as pd

# 创建第一个 DataFrame (df1)
data1 = {'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 (df2)
data2 = {'Site': ['ABC', 'DDC'],
         'City': ['NYC', 'DAL'],
         'State': ['NY', 'TX']}
df2 = pd.DataFrame(data2)

print("DataFrame df1:\n", df1)
print("\nDataFrame df2:\n", df2)
登录后复制

2. 提取关键信息

核心思路是使用正则表达式从 df1['Hostname'] 列中提取出与 df2['Site'] 列匹配的部分。这里假设 df1['Hostname'] 中包含 Server 前缀,后跟三个大写字母,这三个字母对应于 df2['Site'] 的值。

# 使用正则表达式提取 Site 代码
df1['Site'] = df1['Hostname'].str.extract(r"Server([A-Z]{3})")

print("\nDataFrame df1 after extracting Site:\n", df1)
登录后复制

这段代码使用 str.extract() 方法和正则表达式 r"Server([A-Z]{3})" 从 Hostname 列中提取 Site 代码。正则表达式的含义是:

AI Sofiya
AI Sofiya

一款AI驱动的多功能工具

AI Sofiya 109
查看详情 AI Sofiya
  • Server: 匹配字符串 "Server"。
  • ([A-Z]{3}): 匹配三个大写字母,并将其捕获到一个分组中。str.extract() 方法会返回这个分组的内容。

3. 数据合并

现在,df1 已经有了一个新的 Site 列,我们可以使用 pd.merge() 函数将 df1 和 df2 合并。

# 合并 DataFrame
df1 = pd.merge(df1, df2, on='Site', how='left')

print("\nFinal DataFrame:\n", df1)
登录后复制

这里使用 how='left' 进行左连接,保留 df1 中的所有行,并将 df2 中匹配的行添加到 df1 中。如果 df1 中的 Site 在 df2 中没有匹配项,则相应的列将填充 NaN 值。

4. 完整代码示例

import pandas as pd

# 创建第一个 DataFrame (df1)
data1 = {'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 (df2)
data2 = {'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})")

# 合并 DataFrame
df1 = pd.merge(df1, df2, on='Site', how='left')

print(df1)
登录后复制

5. 注意事项与总结

  • 正则表达式的准确性: 正则表达式必须准确匹配需要提取的文本模式。如果 Hostname 的格式发生变化,需要相应地调整正则表达式。
  • how 参数的选择: pd.merge() 函数的 how 参数决定了合并的方式。根据实际需求选择合适的连接方式(left、right、inner、outer)。
  • 数据清洗 在提取和合并之前,可能需要对数据进行清洗,例如处理缺失值、统一数据类型等。
  • 性能优化: 对于大型 DataFrame,可以考虑使用更高效的字符串处理方法或优化正则表达式,以提高性能。

通过以上步骤,我们可以有效地利用 Pandas 和正则表达式,在存在部分匹配关系的情况下,成功合并两个 DataFrame,为后续的数据分析和处理奠定基础。这种方法具有很强的灵活性,可以根据实际情况调整正则表达式和合并策略,适应不同的数据结构和需求。

以上就是基于部分匹配的 Pandas DataFrame 合并:提取与合并技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号