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

将单行中的数值范围拆分为每个值对应的独立行

解决CSV中数值范围字段拆分为多行的问题

方法一:用Python Pandas处理(适合快速脚本实现)

如果用代码处理,Pandas是最便捷的工具,步骤如下:

  1. 读取CSV文件

    import pandas as pd
    df = pd.read_csv('你的CSV文件路径.csv')
    
  2. 定义范围展开函数
    假设需要处理的字段名为target_field,替换成你实际的字段名:

    def expand_range(row):
        val = row['target_field']
        if '-' in val:
            start, end = map(int, val.split('-'))
            # 生成包含起始和结束值的所有整数序列
            return pd.Series(range(start, end + 1))
        else:
            # 非范围值直接返回原数值(转为整数)
            return pd.Series([int(val)])
    
  3. 展开范围为多行

    # 应用函数生成展开后的序列列
    df['expanded_val'] = df.apply(expand_range, axis=1)
    # 拆分序列为多行,删除原字段并重命名
    df_expanded = df.explode('expanded_val').drop('target_field', axis=1)
    df_expanded = df_expanded.rename(columns={'expanded_val': 'target_field'})
    
  4. 保存处理后的CSV

    df_expanded.to_csv('处理后的文件路径.csv', index=False)
    

方法二:ETL工具(如DataStage)中用Transform Stage实现

针对你提到的Transform Stage,核心逻辑是循环遍历范围值并输出多行:

在Transform Stage的代码编辑器中,写入以下伪代码(根据实际字段名调整):

// 检查字段是否包含范围分隔符
If Index(InLink.TargetField, "-", 1) > 0 Then
    // 拆分起始和结束数值
    StartNum = Num(Field(InLink.TargetField, "-", 1))
    EndNum = Num(Field(InLink.TargetField, "-", 2))
    // 循环输出每个数值对应的行
    For i = StartNum To EndNum
        OutLink.Field1 = InLink.Field1
        OutLink.Field2 = InLink.Field2
        // 替换为你的其他字段
        OutLink.TargetField = i
        Output OutLink
    Next i
Else
    // 非范围值直接输出原行
    OutLink.Field1 = InLink.Field1
    OutLink.Field2 = InLink.Field2
    OutLink.TargetField = Num(InLink.TargetField)
    Output OutLink
End If

这个逻辑会遍历范围中的每一个数值,为每个数值生成一行,其他字段保持与原行一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:52:42