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

一行代码实现CSV操作报错排查:合并IMO列遇IndexError索引越界

解决方案:两个Pandas批量处理需求的一行代码实现

需求1:将多个文件的所有列合并到一行中

要实现把多个CSV文件的所有列内容合并成单独一行,可以通过读取每个文件后将数据扁平化,再拼接成单行:

import pandas as pd; combined_row = pd.concat([pd.read_csv(f).unstack() for f in your_file_list], axis=0).to_frame().T

解释:

  • pd.read_csv(f).unstack()会把每个文件的所有列和行的内容展开成一个Series(扁平化处理)
  • pd.concat(..., axis=0)把所有扁平化后的Series拼接成一个大Series
  • .to_frame().T将这个大Series转成单行的DataFrame

需求2:提取指定CSV文件的'IMO'列并合并

原代码错误原因

你遇到的IndexError: list index out of range是因为部分文件名(比如unique_boat_names.csv)用_分割后不足4个元素,访问split('_')[3]会超出索引范围。另外你的判断逻辑依赖固定的分割位置,不够灵活,应该换一种方式识别“以数字结尾”的文件名。

修正后的一行代码

这里用正则表达式匹配文件名末尾(.csv前)带有数字的文件,同时用os.path.join处理路径更安全:

import pandas as pd, re, os; df = pd.concat([pd.read_csv(os.path.join(path, f))['IMO'] for f in all_names if re.search(r'_\d+\.csv$', f)], ignore_index=True)

或者用更直观的文件名判断(提取不含扩展名的部分,检查最后一段是否为数字):

import pandas as pd, os; df = pd.concat([pd.read_csv(os.path.join(path, f))['IMO'] for f in all_names if os.path.splitext(f)[0].split('_')[-1].isdigit()], ignore_index=True)

解释:

  • re.search(r'_\d+\.csv$', f):匹配文件名以_+数字+.csv结尾的文件,精准命中你需要的年份结尾的文件
  • os.path.splitext(f)[0].split('_')[-1].isdigit():提取文件名(去掉.csv),分割后取最后一段判断是否为数字
  • ignore_index=True:合并后重置索引,避免原文件索引冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:31:12