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

如何在J语言中删除CSV数据的日期列 已有CSV读入J代码参考

J语言批量删除CSV指定列实现方案

你现有已实现的CSV读入函数 rdtabfile =: (0&";.;.2@:(TAB&,)@:});._2) @ ReadFile @< 可将目标CSV读取为二维数值数组,后续操作基于该函数的输出结构实现。

核心实现步骤

J语言中二维数组删除指定列可通过转置+索引过滤的方式实现,操作流程如下:

  • 步骤1:定义待删除的列索引,注意J采用0基索引规则,第1列对应索引0,第2列对应索引1,以此类推,示例如下(如果要删除多个列,直接在数组中追加对应索引即可):
DEL_COLS =: 2  NB. 示例:删除第3列(0基索引2)的日期列
  • 步骤2:定义列过滤逻辑,对读入的二维数组执行列删除操作:
' arr为rdtabfile读入的二维数值数组 '
clean_arr =: |: (|: arr) #~ -. (i. # |: arr) e. DEL_COLS

代码说明:先将数组转置,行和列互换,过滤掉对应索引的行之后再转置回原结构,即可得到删除指定列后的数组。

  • 步骤3:定义CSV写回函数,将处理后的数组写入新文件(避免覆盖原文件):
wrtabfile =: dyad : 0
  data =. x
  out_path =. y
  row_str =. (;@:(<@:(,'\n'&,)@:(TAB&join)))"1 data
  row_str fwrite out_path
)
  • 步骤4:批量处理指定目录下所有CSV文件:
process_all =: monad : 0
  ' 读取当前目录所有csv文件 '
  csv_list =. 1&take every > (dir '*.csv')
  for_fn. csv_list do.
    arr =. rdtabfile for_fn
    if. 0 = # arr do. continue end.
    ' 执行列删除 '
    clean_arr =. |: (|: arr) #~ -. (i. # |: arr) e. DEL_COLS
    ' 生成输出文件名,追加_clean后缀 '
    out_fn =. ('.csv' stringreplace for_fn; '_clean.csv')
    clean_arr wrtabfile out_fn
  end.
)
' 启动批量处理 '
process_all ''

注意事项

如果你的CSV包含表头(首行为列名),现有rdtabfile会尝试将表头转成数值导致报错,你需要先调整读入函数跳过首行单独处理表头,将表头和处理后的数组合并后再写回文件。
如果日期列为字符串格式无法被转成数值,你需要先修改rdtabfile支持混合类型数据读取,再执行列删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 12:21:04