J'ai un fichier csv qui ne vient pas correctement pandas.read_csv
lorsque je filtre les colonnes avec usecols
et que j'utilise plusieurs index.
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
Je m'attends à ce que df1 et df2 soient identiques, sauf pour la colonne factice manquante, mais les colonnes sont mal étiquetées. De plus, la date est analysée comme une date.
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
L'utilisation de numéros de colonne au lieu de noms me pose le même problème. Je peux contourner le problème en supprimant la colonne factice après l'étape read_csv, mais j'essaie de comprendre ce qui ne va pas. J'utilise pandas 0.10.1.
edit: correction d'une mauvaise utilisation de l'en-tête.
header
etnames
n'est pas correcte (c'est pourquoi la première ligne est manquante dans votre exemple.header
Attend un int (0 par défaut) comme ligne avec l'en-tête. Parce que vous donnez "True" qui est interprété comme 1, la deuxième ligne (première ligne de données) est utilisée comme en-tête et est manquante. Cependant, les noms de colonnes sont corrects car vous les écrasez avec l'names
argument. Mais vous pouvez les laisser tous les deux et la première ligne est utilisée par défaut pour les noms de colonnes. Cependant, cela ne résout pas votre question initiale.