如何使用Python按文件名匹配规则合并两张数据表
解决方法
核心思路是先从table2的路径字段中提取出纯文件名作为公共匹配键,再用pd.merge完成关联:
- 提取table2的文件名列
用字符串分割方法取路径最后一段的文件名,和table1的Filename列对齐:
# 从Path列提取纯文件名,存入新的Filename列 table2['Filename'] = table2['Path'].str.split('/').str[-1]
- 执行合并操作
以Filename为公共键关联两张表,默认内连接即可匹配到所有存在对应关系的记录,如果需要保留table1的全部数据可以将how参数改为left:
merged_df = pd.merge(table1, table2, on='Filename', how='inner')
原操作失效原因说明
pd.concat是直接对两张表做行/列拼接,不会按照字段值做匹配关联,不符合需求- 之前直接使用
pd.merge失效是因为两张表没有公共的关联字段,提前提取Filename字段后即可正常匹配
完整测试示例
你可以用以下代码验证效果,输出和你期望的样例完全一致:
import pandas as pd # 模拟table1数据 table1 = pd.DataFrame({ 'ID': [12345, 12346, 12347, 12348, 12349, 12350], 'Filename': ['12345.txt', '12346.txt', '12347.txt', '12348.txt', '12349.txt', '12350.txt'] }) # 模拟table2数据 table2 = pd.DataFrame({ 'Path': ['/table/text3/12349.txt', '/table/text1/12345.txt', '/table/text2/12346.txt', '/table/text1/12350.txt', '/table/text3/12347.txt', '/table/text1/12348.txt'] }) # 提取文件名 table2['Filename'] = table2['Path'].str.split('/').str[-1] # 合并 merged_df = pd.merge(table1, table2, on='Filename') print(merged_df)
内容的提问来源于stack exchange,提问作者disukumo
相关产品推荐
相关产品推荐

