2012-05-07 14 views
7

Hei Estoy tratando de leer en pandas el archivo csv puedes download from here (tasas de euribor ¡Creo que puedes imaginar la razón por la que me gustaría tener este archivo!). El archivo es un archivo CSV pero de alguna manera está extrañamente orientado. Si importa que en el archivo de Excel tiene el formatopandas leyendo orientación csv

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

acto con la primera columna ir hasta 12 metros (pero tengo que darle el enlace donde se puede descargar una muestra). Me gustaría leerlo en pandas pero no puedo leerlo de la manera correcta. Pandas tiene una función integrada para leer archivos csv, pero de alguna manera espera estar orientado a filas en lugar de estar orientado a columnas. Lo que me gustaría hacer es obtener la información en la fila etiquetada 3m y tener los valores y la fecha para graficar la variación de tiempo de este índice. Pero no puedo manejar este problema. Sé que puedo leer los datos con

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

pero funcionaría si el archivo csv sería de alguna manera transponer. H

Respuesta

0

Nunca he usado pandas para el procesamiento de csv. Solo uso las funciones estándar de Python lib csv ya que estas usan iteradores.

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

Obviamente, es posible que deba limpiar sus datos después de la importación, p. Debería verificar los tipos de datos, eliminar los campos vacíos (o reemplazarlos por Ninguno). Esta versión procesa todo el conjunto de datos, pero solo devuelve una línea, por lo que podría usar la interrupción en ese punto o quizás agregar otros datos interesantes. p.ej. interesante = ['1w', '3m', '9m']; if l [0] .strip() en interesting: .... –

4

Una trama de datos pandas tiene un método .transpose(), pero no le gusta todas las filas vacías en este archivo. Aquí es cómo conseguir que limpió:

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. 

Por supuesto, se pueden encadenar estos juntos:

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

Entonces es df2['3m'] los datos que desee, pero las fechas todavía se almacenan como cadenas. No estoy muy seguro de cómo convertirlo a DateIndex.

+1

En pandas 0.8.0 podrás hacer DatetimeIndex (array_of_strings) o to_datetime (array_of_strings) para analizarlas en las fechas –

+0

Gracias, intentaré solución propuesta y, eventualmente, esperaré pandas 0.8.0 que, según tengo entendido, estará disponible este mes de mayo –

+0

¿No podría usar esta opción 'skip_blank_lines: boolean, default True'? Si se establece en False, las filas vacías no serán un problema, ¿verdad? – Sebastian