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

处理DataFrame列表列时触发IndexError: list index out of range的解决方法

解决DataFrame列表列索引越界并填充空值的方法

问题原因

你的NVD列包含空列表或长度不足的列表,当直接使用x[1]这类索引取值时,列表长度小于目标索引位置就会触发IndexError: list index out of range。

解决方案

下面提供两种实用的处理方式:

方法1:逐列通过apply安全取值

使用lambda表达式结合长度判断,为空列表/长度不足的行填充pd.NA(或np.nan):

import pandas as pd

# 保留你的初始处理代码
poam = pd.read_excel('NetApp-RET-NVD_V1.xlsx', header = 0)
new_poam = poam[["POAM ID ", 'NVD']]

new_poam['NVD'] = new_poam['NVD'].astype(str)
new_poam['NVD'] = [x[10:] for x in new_poam['NVD']]
new_poam['NVD'] = [x.replace("\/", ",") for x in new_poam['NVD']]
new_poam['NVD'] = [x.split(",") for x in new_poam['NVD']]

# 安全提取列表元素,长度不足时填充空值
new_poam['Attack Vector'] = new_poam['NVD'].apply(lambda x: x[0].strip() if len(x) >= 1 else pd.NA)
new_poam['Attack Complexity'] = new_poam['NVD'].apply(lambda x: x[1].strip() if len(x) >= 2 else pd.NA)
# 如需提取更多元素,依此类推
# new_poam['XXX'] = new_poam['NVD'].apply(lambda x: x[2].strip() if len(x)>=3 else pd.NA)

注:.strip()用于去除元素可能附带的空格,不需要可直接删除。

方法2:批量展开列表列(高效场景)

将NVD列的列表直接展开为多列,自动为长度不足的行填充NaN,再合并到原DataFrame:

import pandas as pd

# 保留你的初始处理代码
poam = pd.read_excel('NetApp-RET-NVD_V1.xlsx', header = 0)
new_poam = poam[["POAM ID ", 'NVD']]

new_poam['NVD'] = new_poam['NVD'].astype(str)
new_poam['NVD'] = [x[10:] for x in new_poam['NVD']]
new_poam['NVD'] = [x.replace("\/", ",") for x in new_poam['NVD']]
new_poam['NVD'] = [x.split(",") for x in new_poam['NVD']]

# 展开列表为多列
expanded_cols = pd.DataFrame(new_poam['NVD'].tolist(), index=new_poam.index)
# 按需求重命名列
expanded_cols.columns = ['Attack Vector', 'Attack Complexity', 'XXX', 'YYY']
# 去除元素空格
expanded_cols = expanded_cols.applymap(lambda x: x.strip() if isinstance(x, str) else x)
# 合并到原DataFrame
new_poam = new_poam.join(expanded_cols)

这种方法适合需要提取多个列表元素的场景,无需逐列编写判断逻辑,处理效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:01:19