2012-05-07 23 views
7

Hei Sto provando a leggere in panda il file csv è possibile download from here (tassi euribor penso che tu possa immaginare il motivo per cui vorrei avere questo file!). Il file è un file CSV ma è in qualche modo stranamente orientato. Se si importa in file di Excel ha il formatopanda lettura orientamento csv

02/01/2012,03/01/2012,04/01/2012,,,, 
1w 0.652,0.626,0.606,,,, 
2w,0.738,0.716,0.700,,,, 

atto con prima colonna che va fino a 12m (ma devo dare il link dove è possibile scaricare un campione). Mi piacerebbe leggerlo nei panda ma non sono in grado di leggerlo nel modo corretto. Pandas ha una funzione integrata per leggere i file CSV, ma in qualche modo si aspetta che sia orientato alla riga piuttosto che orientato alla colonna. Quello che mi piacerebbe fare è ottenere le informazioni sulla riga etichettata 3m e avere i valori e la data per tracciare la variazione temporale di questo indice. Ma non posso gestire questo problema. So di poter leggere i dati con

import pandas 
data = pandas.io.read_csv("file.csv",parse_dates=True) 

ma sarebbe funzionare se il file CSV sarebbe in qualche modo recepire. H

risposta

0

Non ho mai usato i panda per l'elaborazione csv. Io uso solo le funzioni lib csv standard di Python come questi usano gli iteratori.

import csv 
myCSVfile=r"c:/Documents and Settings/Jason/Desktop/hist_EURIBOR_2012.csv" 
f=open(myCSVfile,"r") 
reader=csv.reader(f,delimiter=',') 
data=[] 
for l in reader: 
    if l[0].strip()=="3m": 
     data.append(l) 

f.close() 
+0

Ovviamente potrebbe essere necessario pulire i dati dopo l'importazione, ad es. tu chould controlli i tipi di dati, rimuovi i campi vuoti (o sostituisci con Nessuno) Questa versione elabora l'intero set di dati, ma restituisce solo una riga, così puoi usare l'interruzione a quel punto o forse aggiungere altri dati interessanti. per esempio. interessante = [ '1W', '3m', '9m']; if l [0] .strip() nell'interessante: .... –

4

Un dataframe panda ha un metodo .transpose(), ma non come tutte le righe vuote in questo file. Ecco come ottenerlo ripulito:

df = pandas.read_csv("hist_EURIBOR_2012.csv") # Read the file 
df = df[:15] # Chop off the empty rows beyond 12m 
df2 = df.transpose() 
df2 = df2[:88] # Chop off what were empty columns (I guess you should increase 88 as more data is added. 

Naturalmente, è possibile concatenare insieme questi:

df2 = pandas.read_csv("hist_EURIBOR_2012.csv")[:15].transpose()[:88] 

Poi df2['3m'] sono i dati che si desidera, ma le date sono ancora memorizzati come stringhe. Non sono abbastanza sicuro di come convertirlo in un DateIndex.

+1

In pandas 0.8.0 sarete in grado di fare DatetimeIndex (array_of_strings) o to_datetime (array_of_strings) per analizzarli alle date –

+0

Grazie proveremo il soluzione proposta e alla fine aspetterò pandas 0.8.0 che per quanto ho capito sarà disponibile questo maggio –

+0

Non potresti usare questa opzione 'skip_blank_lines: boolean, default True'? Se impostato su False, le righe vuote non saranno un problema, giusto? – Sebastian

Problemi correlati