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

使用Pandas为指定范围非空单元格添加子串,优化OpenPyXL低效问题

用Pandas高效处理大Excel文件的解决方案

核心思路

放弃OpenPyXL逐单元格循环的低效方式,改用Pandas的矢量化操作——底层基于C实现,能把8000行200列的处理时间压缩到几秒内。核心逻辑是先从Main_col拆分出固定前缀和时间片段,再批量处理目标列的非空单元格。

步骤详解与代码实现

  1. 读取目标Excel数据
    按需求跳过前4行(从第5行开始加载数据),保留空值避免自动填充干扰。
  2. 拆分Main_col关键信息
    从Main_col中拆分出前缀(_之前的内容,如cas1 1)和时间部分(_之后的内容,如05.04.2024 16:40)。
  3. 批量修改目标列
    对第2列(Excel列号)及以后的列,仅针对非空单元格按{原内容}_{时间片段}.{前缀}格式拼接。

完整代码:

import pandas as pd

# 读取Excel:skiprows=4 跳过前4行(从第5行开始加载数据),header=0 以第5行为表头
# 若你的表头在第1行、数据从第5行开始,改用 skiprows=range(1,4), header=0
df = pd.read_excel("your_input_file.xlsx", skiprows=4, header=0)

# 拆分Main_col,提取前缀和时间部分
df[["prefix", "time_part"]] = df["Main_col"].str.split("_", n=1, expand=True)

# 确定目标列:从第2列(Excel列号)开始,对应Pandas中索引1之后的列
target_cols = df.columns[1:]

# 批量处理非空单元格:矢量化操作替代逐行循环
for col in target_cols:
    df[col] = df.apply(
        lambda row: f"{row[col]}_{row['time_part']}.{row['prefix']}"
        if pd.notna(row[col]) and str(row[col]).strip() != ""
        else row[col],
        axis=1
    )

# 删除临时生成的辅助列
df = df.drop(columns=["prefix", "time_part"])

# 保存处理后的文件
df.to_excel("your_output_file.xlsx", index=False)

关键优化点

  • 矢量化操作:Pandas的批量处理逻辑避免了逐单元格遍历,效率比OpenPyXL循环提升几个数量级。
  • 精准空值判断:用pd.notna()结合strip()准确识别有效非空单元格,避免无效计算。
  • 预拆分复用:提前拆分Main_col的结果,避免循环中重复拆分,进一步降低耗时。

注意事项

  • 若需保留原Excel格式,可在保存时指定engine="openpyxl",核心处理逻辑无需改动。
  • 若表头位置或数据起始行与示例不同,调整read_excel的skiprows和header参数即可。

内容的提问来源于stack exchange,提问作者Davide C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:55:26