Eliminar la columna de índice en pandas al leer un csv


128

Tengo el siguiente código que importa un archivo CSV. Hay 3 columnas y quiero establecer las dos primeras en variables. Cuando configuro la segunda columna a la variable "eficiencia", la columna de índice también se agrega. ¿Cómo puedo deshacerme de la columna de índice?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

Traté de usar

del df['index']

después de configurar

energy = df.index

que encontré en otra publicación pero que da como resultado "KeyError: 'index'"

Respuestas:


70

Los marcos de datos y las series siempre tienen un índice. Aunque se muestra junto a la (s) columna (s), no es una columna, por del df['index']lo que no funcionó.

Si desea reemplazar el índice con números secuenciales simples, use df.reset_index().

Para tener una idea de por qué el índice está allí y cómo se usa, vea, por ejemplo, 10 minutos para Pandas .


1
¡Gracias! Decidí importarlo de una manera diferente sin usar pandas. Tengo que realizar algunos cálculos aritméticos en cada una de las columnas y a Python no le gustaba tener la columna de índice adjunta. Pandas es sin duda la forma más fácil de importar datos, pero no siempre es la mejor que descubrí.
Bogdan Janiszewski

2
¿Intentaste usar Pandas para hacer la aritmética?
Jamie Bull

1
¿Se puede eliminar el nombre del índice?
Quant

3
Sí, index.name = None.
Dan Allan

1
@BogdanJaniszewski, si no usaste pandas, ¿por qué aceptaste esto como respuesta?
multigoodverse

249

Al leer desde y hacia su archivo CSV, incluya el argumento, index=Falsepor ejemplo:

 df.to_csv(filename, index=False)

y leer del csv

df.read_csv(filename, index=False)  

Esto debería evitar el problema, por lo que no necesita solucionarlo más tarde.


8
Muchas gracias. Esto es exactamente lo que está buscando la pregunta.
Pale Blue Dot

1
"header = False" funciona para eliminar encabezados de la misma manera
J.Dahlgren

29
debería ser index_col=False.
Vedda

1
El uso df.to_sql("table",cursor,if_exists="append",index=False)también corrige el error sqlitesqlite3.OperationalError: table message has no column named index
Anna

1
@vedda parece ser index=Falsepara to_excel()y index_col=Falsecon read_csv()pandas 0.23.4. : - /
matt wilkie

70

df.reset_index(drop=True, inplace=True)


2
Esta es en realidad mi solución favorita, pero no es una respuesta muy elaborada. El manual lee esto sobre el argumento drop: "No intente insertar el índice en las columnas del marco de datos. Esto restablece el índice al índice entero predeterminado". pandas.pydata.org/pandas-docs/stable/generated/…
tommy.carstensen

@ tommy.carstensen Entonces, ¿cómo evitarías obtener los enteros en el índice como reemplazo del índice anterior? Creo que es un malentendido el texto de su enlace. La pregunta aquí es soltar el índice . Y esto se alcanza aquí. Obtiene los enteros predeterminados, ya que no hay un marco de fecha sin un índice, pero ha eliminado el índice anterior. Es por eso que esta respuesta debe ser la respuesta aceptada, también porque utiliza la memoria eficiente inplace=True.
Lorenz

13

Puede establecer una de las columnas como un índice en caso de que sea un "id", por ejemplo. En este caso, la columna de índice se reemplazará por una de las columnas que haya elegido.

df.set_index('id', inplace=True)

3

Si su problema es el mismo que el mío, solo desea restablecer los encabezados de columna de 0 a tamaño de columna. Hacer

df = pd.DataFrame(df.values);

EDITAR:

No es una buena idea si tiene tipos de datos heterogéneos. Mejor solo use

df.columns = range(len(df.columns))

2

puede especificar qué columna es un índice en su archivo csv utilizando el parámetro index_col de la función from_csv si esto no resuelve su problema, proporcione ejemplos de sus datos


2

Una cosa que hago es df=df.reset_index() entoncesdf=df.drop(['index'],axis=1)


Error: "etiquetas ['índice'] no contenidas en el eje"
Vasin Yuriy

@VasinYuriy esto significa df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex'])que funciona con 'índice' solo en el caso estándar de que el índice no tenga un nombre y luego se convierta en una columna llamada 'índice' con df.reset_index().drop(columns=['index']). El parámetro agregado axis=1es el predeterminado. Este método no se recomienda, @ SubhojitMukherjee reset_index(inplace=True)funciona "en el lugar" y, por lo tanto, ahorra memoria.
Lorenz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.