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

Python&Pandas基于字符串匹配合并CSV文件的实现方法咨询

解决方案

问题原因分析

  • 直接对Pandas Series对象调用str(),得到的是整个列的打印摘要字符串,不是逐行的字段值,匹配逻辑自然不成立
  • Series.str.contains()不支持传入列表作为匹配参数,且你没有遍历花名册的每一行做对应匹配,逻辑存在缺失
  • 未统一字段类型,比如数字型的user_id和字符串型的user_id无法匹配,也会导致匹配结果始终为False

实现方案

方案1:提取user_id关联(推荐,匹配准确率最高)

你的文件名规则为{first_name}{last_name}_{user_id}_{其他内容},可以直接提取唯一标识user_id作为关联主键,效率最高:

import pandas as pd
import os

# 读取文件
file_df = pd.read_csv('filedata.csv')
roster_df = pd.read_csv('roster.csv')

# 从文件路径中提取user_id,统一转为字符串避免类型不匹配
file_df['user_id'] = file_df['filename'].apply(
    lambda x: os.path.basename(x).split('_')[1]
).astype(str)
roster_df['user_id'] = roster_df['user_id'].astype(str)

# 按user_id关联两个表
result_df = pd.merge(file_df, roster_df, on='user_id', how='left')

# 输出结果
result_df.to_csv('filedata_updated.csv', index=False, encoding='utf-8-sig')

方案2:字符串模糊匹配(适合文件名规则不固定的场景)

如果不能直接提取user_id,可以拼接匹配关键词逐行匹配:

import pandas as pd

file_df = pd.read_csv('filedata.csv')
roster_df = pd.read_csv('roster.csv')

# 拼接匹配关键词
roster_df['match_key'] = roster_df['first_name'] + roster_df['last_name'] + '_' + roster_df['user_id'].astype(str)

result_df = file_df.copy()
# 遍历花名册逐行匹配
for _, row in roster_df.iterrows():
    match_mask = result_df['filename'].str.contains(row['match_key'], case=False)
    result_df.loc[match_mask, ['first_name', 'last_name', 'user_id']] = row[['first_name', 'last_name', 'user_id']].values

result_df.to_csv('filedata_updated.csv', index=False, encoding='utf-8-sig')

运行后生成的filedata_updated.csv就是你需要的目标结构,匹配不到的行对应字段会留空,方便后续排查异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:03