如何使用Python匹配Stock.csv数据为Sold.csv填充对应Item_No的价格字段
实现方案
推荐使用pandas库完成匹配,3万条数据处理仅需毫秒级耗时,操作逻辑简单不易出错。
前置依赖
如果环境未安装pandas,先执行安装命令:pip install pandas
完整代码
import pandas as pd # 1. 读取全量商品库存表 stock_df = pd.read_csv("Stock.csv", dtype={"Item_No": str}) # 若Item_No是纯数字可去掉dtype参数,加该参数是避免前后缀0、编码问题导致匹配失败 # 2. 读取待填充的已售商品表 sold_df = pd.read_csv("Sold.csv", dtype={"Item_No": str}) # 3. 按Item_No字段左关联,匹配对应价格,直接覆盖原有空的Price列 sold_df = sold_df.drop(columns=["Price"]).merge( stock_df[["Item_No", "Price"]], on="Item_No", how="left" ) # 4. 导出填充完成的新文件,不会覆盖原文件 sold_df.to_csv("Sold_填充完成.csv", index=False, encoding="utf-8-sig")
代码说明
- 关联逻辑使用左连接(
how="left"),完全保留Sold.csv原有行顺序和所有Item_No记录,不会多删少加 - 若存在Sold.csv里的Item_No在Stock.csv找不到的情况,对应Price会自动填充为空值,方便后续单独排查异常数据
- 导出时用utf-8-sig编码,避免用Excel打开时出现乱码问题
备用纯Python方案(无需安装第三方库)
如果环境不允许安装pandas,可以用Python原生csv库实现:
import csv # 先把库存表读成映射字典 price_map = {} with open("Stock.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: price_map[row["Item_No"].strip()] = row["Price"].strip() # 读取已售表,逐行填充价格 output_rows = [] with open("Sold.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: row["Price"] = price_map.get(row["Item_No"].strip(), "") output_rows.append(row) # 导出填充完成的结果 with open("Sold_填充完成.csv", "w", encoding="utf-8-sig", newline="") as f: writer = csv.DictWriter(f, fieldnames=output_rows[0].keys()) writer.writeheader() writer.writerows(output_rows)
内容的提问来源于stack exchange,提问作者ray
相关产品推荐
相关产品推荐

