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

使用Pandas实现两个CSV按EAN匹配更新指定列的相关问题

问题原因分析

  • 第一个报错的触发原因:dfi.EAN.values是pandas Series内置的数组属性,不属于可调用方法,你额外加了()才会抛出numpy.ndarray不可调用的错误。且即使去掉括号,直接对两个长度不同的数组做全等对比也不符合你的匹配逻辑,只能得到长度报错或者错位对比的错误结果。
  • 你想到的合并方案方向是对的,不需要手动循环遍历行,pandas内置的匹配赋值效率更高。

实现代码

import pandas as pd

csv_input = 'beschreibung.csv'
csv_output = 'shop2.csv'

# 读取两个文件,注意如果实际分隔符只有分号,建议把sep改为";"避免解析异常
dfi = pd.read_csv(csv_input, sep=";\t", usecols=['EAN', 'Beschreibung'])
dfo = pd.read_csv(csv_output, sep=";\t", usecols=['ean', 'description_long'])

# 左连接匹配:保留输出表的所有行,只给匹配到EAN的行更新描述
df_merged = dfo.merge(dfi, how='left', left_on='ean', right_on='EAN')

# 用匹配到的Beschreibung覆盖description_long,没匹配到的保留原值
df_merged['description_long'] = df_merged['Beschreibung'].fillna(df_merged['description_long'])

# 只保留输出表需要的列,删掉多余的匹配列
df_final = df_merged[['ean', 'description_long']]

# 保存结果到新文件,避免覆盖原shop2.csv出错,验证没问题后可以修改路径覆盖原文件
df_final.to_csv('shop2_updated.csv', sep=';', index=False)

可选优化点

  • 如果EAN/ean列有字符串/数值类型不一致的匹配失败问题,可以在匹配前统一类型:
    dfi['EAN'] = dfi['EAN'].astype(str)
    dfo['ean'] = dfo['ean'].astype(str)
    
  • 如果确认不需要额外保留合并过程数据,可以直接用map方法更简洁:
    # 建立EAN到Beschreibung的映射字典
    ean_map = dfi.set_index('EAN')['Beschreibung'].to_dict()
    # 匹配赋值
    dfo['description_long'] = dfo['ean'].map(ean_map).fillna(dfo['description_long'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:39:03