Python3 - 为什么这段代码出现在索引之外?

标签 python python-3.x pandas

我正在使用 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/

相关文章:

Python:当前目录是否自动包含在路径中?

python3 和请求 : still getting 'sslv3 alert handshake failure'

python - 无法解析列名称 Spark

python - ctypes.create_string_buffer Python 2 与 Python 3

python - 根据从 python 中的其他两个字符串列应用的条件创建一个新列

python - 如何将值从 VBA 传递到 python

python - 如何在一个函数中设置两个消息处理程序

python - 如何将 PySpin 与 opencv python 一起使用?

python - Pandas groupby然后选择一行

python - 如何使用 Python 构建基于时间戳发生的序列?