python IndexError:尝试将值列表添加到DataFrame列时列表索引超出范围

rseugnpd  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(163)

我有一个 Dataframe 列NVD,其中每行包含一个列表。我创建了几个新列,我想将列表中的第一个值添加到特定列,将列表中的第二个值添加到另一个列,等等。但是,我遇到了此错误IndexError: list index out of range
下面是我的起始DataFrame

poam = pd.read_excel('NetApp-RET-NVD_V1.xlsx', header = 0)
new_poam = poam[["POAM ID ", 'NVD']]

# Split string into separate values and create list from values
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']]
print(new_poam)

>>> Output

    POAM ID                                            NVD
0     V-1744  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]
1     V-1747  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]
2     V-1748  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]
3     V-1749  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]
4     V-1751  [AV:N, AC:L, PR:L, UI:N, S:U, C:N, I:N, A:H]
..       ...                                           ...
200   V-2080                                            []
201   V-2082                                            []
202   V-2083                                            []
203   V-2084                                            []
204   V-2085                                            []

NVD是我想要的值列表-所以现在我想添加所有新列,并将列表中的值添加到这些列中,下面是我实现这一点的方法:

new_poam.reindex(columns = new_poam.columns.tolist() + ['Attack Vector','Attack Complexity', 'Privileges Required', 'User Interaction', 'Impact Metrics: Confidentiality', 'Impact Metrics: Integrity', 'Impact Metrics: Availability', 'Remediation Level', 'List of Risk Reeduction'])
new_poam['Attack Vector'] = [x[0] for x in new_poam['NVD']]
print(new_poam)

>>> Output

    POAM ID                                            NVD Attack Vector
0     V-1744  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]          AV:N
1     V-1747  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]          AV:N
2     V-1748  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]          AV:N
3     V-1749  [AV:N, AC:L, PR:H, UI:N, S:U, C:N, I:N, A:H]          AV:N
4     V-1751  [AV:N, AC:L, PR:L, UI:N, S:U, C:N, I:N, A:H]          AV:N
..       ...                                           ...           ...
200   V-2080                                            []              
201   V-2082                                            []              
202   V-2083                                            []              
203   V-2084                                            []              
204   V-2085                                            []

您可以看到,列表中的第一个值已添加到Attack Vector列,但现在,当我尝试将列表中的第二个值添加到Attack Complexity列时,如下所示:

new_poam['Attack Complexity'] = [x[1] for x in new_poam['NVD']]

我得到了前面提到的错误IndexError: list index out of range,我假设这是因为NVD列的一些行没有值,所以它是一个空列表,当我从列表中添加[0]值时,它对空列表没有任何作用,但是当我添加其他值时,我认为这是导致错误的原因?如果是这样的话,如果它是一个空列表,我如何使它只向每个新列添加一个通用的“Null”值?

hs1ihplo

hs1ihplo1#

在本例中,只需执行if语句

l = []
for i in new_poam['NVD']:
    if not i:
       l.append('0')
    else:
       l.append(i[1])
df['new_column'] = l

条件if not将检查您的列表是否为空

相关问题