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

如何使用for循环递归创建Data Frame优化序列号处理代码

代码优化方案

完全可以通过for循环实现该逻辑,原代码重复度极高,仅位长、导出文件名等参数有差异,用循环重构后可大幅提升可维护性和扩展性,重构后代码如下:

import pandas as pd

# 配置每位长的处理参数:(位长, 首次导出文件名, raw导出文件名, 是否存入待合并列表)
length_config = [
    (28, 'first.xlsx', 'raw.xlsx', True),
    (30, None, 'raw1.xlsx', True),
    (32, None, 'raw2.xlsx', True),
    (34, None, None, False)
]

# 收集待合并的筛选后数据集
collect_dfs = []

for length, first_export_name, raw_export_name, need_collect in length_config:
    # 通用处理逻辑
    data["Serial Number"] = data['Serial Number'].str.zfill(length)
    print(f"Fetch Serial Number with {length} characters")
    data["Output"] = data['Serial Number'].apply(lambda x: fetch_by_ser_no(x))

    # 仅28位场景需要导出first.xlsx
    if first_export_name:
        data.to_excel(first_export_name, index=False)
    
    # 计算长度字段
    data.loc[:,'itemlen'] = data["Output"].str.len()
    data.loc[:,'SNlen'] = data["Serial Number"].str.len()

    # 28/30/32位场景需要筛选数据、删除符合条件的行、导出raw文件
    if raw_export_name:
        filtered_df = data.loc[(data['itemlen']== 1) & (data['SNlen'] == length)]
        data.drop(data[(data['SNlen'] == length) & (data['itemlen'] == 1)].index, inplace=True)
        filtered_df.to_excel(raw_export_name, index=False)
        if need_collect:
            collect_dfs.append(filtered_df)

# 合并所有数据集,替换pandas 2.0+已废弃的append方法
data = pd.concat([data] + collect_dfs, ignore_index=False)

优化说明

  • 所有重复逻辑收拢到循环内,后续新增位长处理仅需在length_config中添加一行配置即可,无需重复写代码
  • 避免手动定义df/df1/df2这类冗余变量,用列表统一收集待合并数据集,逻辑更清晰
  • 完全兼容原代码全部业务逻辑,导出文件名、筛选规则、合并逻辑和原代码完全一致
  • 替换了pandas高版本已废弃的DataFrame.append()方法,改用官方推荐的pd.concat(),兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:30:03