leer el archivo csv y devolver el dataframe

Tengo un archivo CSV, "value.txt" con el siguiente contenido: las primeras filas del archivo son:

 Date,"price","factor_1","factor_2" 2012-06-11,1600.20,1.255,1.548 2012-06-12,1610.02,1.258,1.554 2012-06-13,1618.07,1.249,1.552 2012-06-14,1624.40,1.253,1.556 2012-06-15,1626.15,1.258,1.552 2012-06-16,1626.15,1.263,1.558 2012-06-17,1626.15,1.264,1.572 

En R podemos leer este archivo usando

 price <- read.csv("value.txt") 

y eso devolverá un data.frame que puedo usar para operaciones estadísticas:

 > price  price Date price factor_1 factor_2 1 2012-06-11 1600.20 1.255 1.548 2 2012-06-12 1610.02 1.258 1.554 3 2012-06-13 1618.07 1.249 1.552 4 2012-06-14 1624.40 1.253 1.556 5 2012-06-15 1626.15 1.258 1.552 6 2012-06-16 1626.15 1.263 1.558 7 2012-06-17 1626.15 1.264 1.572 

¿Hay alguna forma pythonica de obtener la misma funcionalidad?

pandas al rescate:

 import pandas as pd print pd.read_csv('value.txt') Date price factor_1 factor_2 0 2012-06-11 1600.20 1.255 1.548 1 2012-06-12 1610.02 1.258 1.554 2 2012-06-13 1618.07 1.249 1.552 3 2012-06-14 1624.40 1.253 1.556 4 2012-06-15 1626.15 1.258 1.552 5 2012-06-16 1626.15 1.263 1.558 6 2012-06-17 1626.15 1.264 1.572 

Esto devuelve Pandas DataFrame que es similar a R's .

Aquí hay una alternativa a la biblioteca de pandas usando el módulo csv incorporado de Python.

 import csv from pprint import pprint with open('foo.csv', 'rb') as f: reader = csv.reader(f) headers = reader.next() column = {h:[] for h in headers} for row in reader: for h, v in zip(headers, row): column[h].append(v) pprint(column) # Pretty printer 

imprimirá

 {'Date': ['2012-06-11', '2012-06-12', '2012-06-13', '2012-06-14', '2012-06-15', '2012-06-16', '2012-06-17'], 'factor_1': ['1.255', '1.258', '1.249', '1.253', '1.258', '1.263', '1.264'], 'factor_2': ['1.548', '1.554', '1.552', '1.556', '1.552', '1.558', '1.572'], 'price': ['1600.20', '1610.02', '1618.07', '1624.40', '1626.15', '1626.15', '1626.15']} 

Puede usar el módulo csv que se encuentra en la biblioteca estándar de python para manipular los archivos CSV.

ejemplo:

 import csv with open('some.csv', 'rb') as f: reader = csv.reader(f) for row in reader: print row 

Prueba esto:

 import pandas as pd print(pd.read_csv("path to file")) 

Nota bastante limpio, pero:

 import csv with open("value.txt", "r") as f: csv_reader = reader(f) num = ' ' for row in csv_reader: print num, '\t'.join(row) if num == ' ': num=0 num=num+1 

No es tan compacto, pero hace el trabajo:

  Date price factor_1 factor_2 1 2012-06-11 1600.20 1.255 1.548 2 2012-06-12 1610.02 1.258 1.554 3 2012-06-13 1618.07 1.249 1.552 4 2012-06-14 1624.40 1.253 1.556 5 2012-06-15 1626.15 1.258 1.552 6 2012-06-16 1626.15 1.263 1.558 7 2012-06-17 1626.15 1.264 1.572