
本文旨在介绍如何使用 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
微信扫一扫
支付宝扫一扫