web-dev-qa-db-fra.com

Comment lire une série de pandas à partir d'un fichier CSV

J'ai un fichier CSV formaté comme suit:

somefeature,anotherfeature,f3,f4,f5,f6,f7,lastfeature
0,0,0,1,1,2,4,5

Et j'essaie de le lire comme une série de pandas (en utilisant instantané quotidien des pandas pour Python 2.7). J'ai essayé ce qui suit:

import pandas as pd
types = pd.Series.from_csv('csvfile.txt', index_col=False, header=0)

et:

types = pd.read_csv('csvfile.txt', index_col=False, header=0, squeeze=True)

Mais les deux ne fonctionneront tout simplement pas: le premier donne un résultat aléatoire et le second importe un DataFrame sans le compresser.

Il semble que les pandas ne peuvent reconnaître en tant que série qu’un CSV formaté comme suit:

f1, value
f2, value2
f3, value3

Mais lorsque les clés des fonctionnalités sont dans la première ligne au lieu de la colonne, les pandas ne veulent pas la presser.

Y at-il autre chose que je peux essayer? Ce comportement est-il voulu?

7
gaborous

Voici le chemin que j'ai trouvé:

df = pandas.read_csv('csvfile.txt', index_col=False, header=0);
serie = df.ix[0,:]

Cela me semble un peu stupide, car Squeeze devrait déjà le faire. Est-ce un bug ou est-ce que je manque quelque chose?

/ EDIT: Meilleur moyen de le faire:

df = pandas.read_csv('csvfile.txt', index_col=False, header=0);
serie = df.transpose()[0] # here we convert the DataFrame into a Serie

C’est le moyen le plus stable d’introduire une ligne CSV orientée ligne dans une série de pandas.

En passant, l'argument squeeze = True est inutile pour le moment, car à ce jour (avril 2013), il ne fonctionne qu'avec les fichiers CSV orientés ligne, voir la doc officielle:

http://pandas.pydata.org/pandas-docs/dev/io.html#returning-series

14
gaborous
In [28]: df = pd.read_csv('csvfile.csv')

In [29]: df.ix[0]
Out[29]: 
somefeature       0
anotherfeature    0
f3                0
f4                1
f5                1
f6                2
f7                4
lastfeature       5
Name: 0, dtype: int64
3
waitingkuo
ds = pandas.read_csv('csvfile.csv', index_col=False, header=0);    
X = ds.iloc[:, :10] #ix deprecated