You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于s开头匹配码从两个Pandas DataFrame提取对应文件并合并的需求

问题描述

现有两个Pandas DataFrame:df1和df2,各包含一列数据:

  • df1的列名为Text_File_Location,存储文本文件路径(示例:/home/mzkhan/2.0.0/files/p15/p15546261/s537061.txt)
  • df2的列名为Image_File_Location,存储图像文件路径(示例:/media/mzkhan/external_dr/radiology_image/2.0.0/files/p10/p10000032/s537061/xxx.jpg)

已知df2的文件数量多于df1,需要以路径中以字母s开头的字母数字匹配码(如s537061、s586955)为匹配依据,提取两个DataFrame中匹配的文件路径,合并到新的DataFrame的两列中。

解决方案

1. 提取匹配码

用正则表达式从两个路径列中精准提取s开头的匹配码:

import pandas as pd
import re

# 从df1的文本路径中提取匹配码
df1['match_code'] = df1['Text_File_Location'].apply(lambda x: re.search(r's\d+', x).group())

# 从df2的图像路径中提取匹配码
df2['match_code'] = df2['Image_File_Location'].apply(lambda x: re.search(r's\d+', x).group())

2. 合并匹配记录

通过内连接只保留两边都存在匹配码的记录,最后整理成需要的列结构:

# 内连接,仅保留匹配成功的记录
merged_df = pd.merge(df1, df2, on='match_code', how='inner')

# 仅保留路径列,剔除中间生成的匹配码列
merged_df = merged_df[['Text_File_Location', 'Image_File_Location']]

可选处理:去重图像路径

如果df2中同一个匹配码对应多个图像路径,可先对df2去重,只保留每个匹配码对应的第一条图像路径:

# 按匹配码去重,保留第一个出现的图像路径
df2_unique = df2.drop_duplicates(subset='match_code', keep='first')
merged_df = pd.merge(df1, df2_unique, on='match_code', how='inner')

内容的提问来源于stack exchange,提问作者user10019553

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:01:02