iloc dando ‘IndexError: el indexador posicional único está fuera de los límites’

2 minutos de lectura

avatar de usuario
Taylrl

Estoy tratando de codificar información para leer en un modelo de Machine Learning usando lo siguiente

import numpy as np
import pandas as pd
import matplotlib.pyplot as py

Dataset = pd.read_csv('filename.csv', sep = ',')

X = Dataset.iloc[:,:-1].values
Y = Dataset.iloc[:,18].values

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()

sin embargo, recibo un error que dice

IndexError: single positional indexer is out-of-bounds

Este error es causado por:

Y = Dataset.iloc[:,18].values

La indexación está fuera de los límites aquí probablemente porque hay menos de 19 columnas en su conjunto de datos, por lo que la columna 18 no existe. El siguiente código que proporcionó no usa Y en absoluto, por lo que puede comentar esta línea por ahora.

avatar de usuario
Nicolás Gervais

Esto sucede cuando indexa una fila/columna con un número mayor que las dimensiones de su dataframe. Por ejemplo, obtener la undécima columna cuando solo tiene tres.

import pandas as pd

df = pd.DataFrame({'Name': ['Mark', 'Laura', 'Adam', 'Roger', 'Anna'],
                   'City': ['Lisbon', 'Montreal', 'Lisbon', 'Berlin', 'Glasgow'],
                   'Car': ['Tesla', 'Audi', 'Porsche', 'Ford', 'Honda']})

Tienes 5 filas y tres columnas:

    Name      City      Car
0   Mark    Lisbon    Tesla
1  Laura  Montreal     Audi
2   Adam    Lisbon  Porsche
3  Roger    Berlin     Ford
4   Anna   Glasgow    Honda

Intentemos indexar la undécima columna (no existe):

df.iloc[:, 10] # there is obviously no 11th column

IndexError: el indexador posicional único está fuera de los límites

Si eres un principiante con Python, recuerda que df.iloc[:, 10] se referiría a la undécima columna.

avatar de usuario
questionto42estáconUcrania

No ayuda para la solución de la pregunta aquí, pero quienquiera que venga aquí por el error y no por el ejemplo, tuve este error. IndexError: single positional indexer is out-of-bounds cuando traté de encontrar una fila en un dataframe2 mientras recorría las filas de dataframe1, usando muchos criterios en el filtro de dataframe2 y agregando cada fila encontrada a un nuevo dataframe3 vacío (¡No me preguntes por qué!). Uno de los valores en la fila era un valor “nan” tanto en dataframe1 como en dataframe2. Ya no pude filtrar ni agregar una nueva fila.

Solución:

dataframe1.fillna("nan") # or whatever you want as a fill value
dataframe2.fillna("nan")

y el script se ejecutó sin el error.

¿Ha sido útil esta solución?