Tengo un archivo csv que no aparece correctamente pandas.read_csvcuando filtro las columnas usecolsy uso varios índices.
import pandas as pd
csv = r"""dummy,date,loc,x
bar,20090101,a,1
bar,20090102,a,3
bar,20090103,a,5
bar,20090101,b,1
bar,20090102,b,3
bar,20090103,b,5"""
f = open('foo.csv', 'w')
f.write(csv)
f.close()
df1 = pd.read_csv('foo.csv',
header=0,
names=["dummy", "date", "loc", "x"],
index_col=["date", "loc"],
usecols=["dummy", "date", "loc", "x"],
parse_dates=["date"])
print df1
# Ignore the dummy columns
df2 = pd.read_csv('foo.csv',
index_col=["date", "loc"],
usecols=["date", "loc", "x"], # <----------- Changed
parse_dates=["date"],
header=0,
names=["dummy", "date", "loc", "x"])
print df2
Espero que df1 y df2 sean iguales excepto por la columna ficticia que falta, pero las columnas vienen mal etiquetadas. Además, la fecha se analiza como una fecha.
In [118]: %run test.py
dummy x
date loc
2009-01-01 a bar 1
2009-01-02 a bar 3
2009-01-03 a bar 5
2009-01-01 b bar 1
2009-01-02 b bar 3
2009-01-03 b bar 5
date
date loc
a 1 20090101
3 20090102
5 20090103
b 1 20090101
3 20090102
5 20090103
Usar números de columna en lugar de nombres me da el mismo problema. Puedo solucionar el problema eliminando la columna ficticia después del paso read_csv, pero estoy tratando de comprender qué es lo que está mal. Estoy usando pandas 0.10.1.
editar: se corrigió el mal uso del encabezado.
headerynamesno es correcto (es por eso que falta la primera fila en su ejemplo.headerEspera un int (predeterminado 0) como la fila con el encabezado. Debido a que da "Verdadero", que se interpreta como 1, la segunda fila (la primera fila de datos) se usa como encabezado y falta. Sin embargo, los nombres de las columnas son correctos porque los sobrescribe con elnamesargumento. Pero ambos pueden dejarlos y la primera fila se usa para los nombres de las columnas de manera predeterminada. Sin embargo, no resuelve su pregunta inicial.