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

如何用Python按Pool列匹配 仅更新Excel中CSV含对应项的数据

基于Pandas按Pool匹配更新Excel数值的实现

核心逻辑是先读取Excel中已有的目标表数据,以Pool列为关联键,仅更新CSV中存在对应Pool的行数值,CSV中没有的Pool保留Excel原有内容,最后将更新完成的完整数据写回原位置即可,完全兼容你现有的pandas处理逻辑。

完整实现代码

import pandas as pd

# 1. 读取CSV文件,和你原有逻辑保持一致
dfcsv = pd.read_csv("file.csv", sep=";", decimal=",")

# 2. 读取Excel中已有的Pool表格
# 注意参数:header填你表格表头所在的0索引行号,和你之前写入的位置对应;usecols指定读取前三列避免读入无关内容
df_excel = pd.read_excel(
    filename,
    sheet_name="Compute",
    header=3,  # 0索引,对应Excel从1开始计数的第4行,即存放Pool/Storage/Used表头的行
    usecols="A:C"
)

# 3. 统一Pool列数据类型,避免数字/字符串格式不一致导致匹配失败
pool_type = type(dfcsv["Pool"].iloc[0])
df_excel["Pool"] = df_excel["Pool"].astype(pool_type)

# 4. 关联更新:以Pool为索引,用CSV数据覆盖匹配到的行,未匹配到的Excel原有数据保留
df_updated = df_excel.set_index("Pool").combine_first(dfcsv.set_index("Pool")).reset_index()
# 仅保留需要的三列,避免CSV中多余字段写入Excel
df_updated = df_updated[["Pool", "Storage", "Used"]]

# 5. 将更新后的数据写回Excel原位置,参数和你之前的写入逻辑完全兼容
with pd.ExcelWriter(
    filename,
    mode="a",
    if_sheet_exists="overlay",
    datetime_format="dd.mm.yyyy hh:mm",
    engine="openpyxl"
) as writer:
    df_updated.to_excel(
        writer,
        sheet_name="Compute",
        startcol=0,
        startrow=4,  # 0索引,对应Excel从1开始计数的第5行,即第一条数据存放的行,不要覆盖表头
        index=False,
        header=False
    )

注意事项

  • 请根据你表格的实际位置调整header和startrow参数:header是表头所在的0索引行号,startrow是第一条数据开始写入的0索引行号,比header大1即可,避免覆盖原有表头。
  • 如果读写时提示缺少openpyxl依赖,执行pip install openpyxl安装即可,pandas的追加覆写模式需要该引擎支持。
  • 如果出现部分Pool匹配失败的情况,先打印dfcsv["Pool"]和df_excel["Pool"]检查是否存在多余空格、格式不一致的问题。
  • 该方案只会覆盖A-C列对应的数据行,表格其他位置的内容、公式、格式都不会被改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:51:30