我正在使用 kaggle 的 IMDB 5000+ 电影元数据集练习回归。我正在使用 pandas 库读取 csv 文件并将该数据转换为嵌套列表。我得到一个名为 movie_data 的列表。
我想删除 movie_data[n]
行,其中 movie_data[n][0] != 'Color'
。所以我尝试通过 for 循环删除,但是这段代码出现在 i == 4827
:
IndexError: list index out of range
这是我的代码:
import tensorflow as tf
import numpy as np
import pandas as pd
tf.set_random_seed(777)
read = pd.read_csv('movie_metadata.csv', sep=',')
movie_data = read.values.tolist()
gross_data = []
for i in range(len(movie_data)):
gross_data.append(movie_data[i][8])
#delete gross row
for row in movie_data:
del row[8]
#remove not-colored (e.g. black and white) movie datas
for i in range(len(movie_data)):
print(i)
if movie_data[i][0] != 'Color':
del movie_data[i]
training_movie_data = movie_data[0:3500]
training_gross_data = gross_data[0:3500]
#print(training_movie_data)
错误发生在第 20 行:if movie_data[i][0] != 'Color'
我该如何解决这个问题?
最佳答案
你不应该删除你正在迭代的元素:
In [11]: A = [1, 2, 3]
In [12]: for i in range(len(A)):
...: del A[i]
...:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-12-1ffb9090e54f> in <module>()
1 for i in range(len(A)):
----> 2 del A[i]
3
IndexError: list assignment index out of range
在这种情况下:
In [21]: A = [1, 2, 3]
In [22]: for i in range(len(A)):
...: print(A[i])
...: del A[i]
...:
1
3
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-22-af7e1866dc89> in <module>()
1 for i in range(len(A)):
----> 2 print(A[i]);del A[i]
3
4
IndexError: list index out of range
这就是您使用 del movie_data[i]
所做的事情。
关于Python3 - 为什么这段代码出现在索引之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906535/