Tengo un archivo csv que no aparece correctamente pandas.read_csv
cuando filtro las columnas usecols
y 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.
header
ynames
no es correcto (es por eso que falta la primera fila en su ejemplo.header
Espera 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 elnames
argumento. 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.