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'"

Bogdan Janiszewski
fuente

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 .

Dan Allan
fuente
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.

Steve
fuente
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)

Subhojit Mukherjee
fuente
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)
Natheer Alabsi
fuente
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))
Bhanu Pratap Singh
fuente
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

yemu
fuente
2

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

Lord Varis
fuente
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