tablas - pandas python
La forma más rápida de analizar grandes archivos CSV en Pandas (2)
Como dijo @chrisb, pandas '' read_csv
es probablemente más rápido que csv.reader/numpy.genfromtxt/loadtxt
. No creo que encuentre algo mejor para analizar el csv (como nota, read_csv
no es una solución de ''python puro'', ya que el analizador CSV se implementa en C).
Pero, si tiene que cargar / consultar los datos a menudo, una solución sería analizar el CSV solo una vez y luego almacenarlo en otro formato, por ejemplo, HDF5. Puede usar pandas
(con PyTables
en segundo plano) para realizar una consulta de manera eficiente ( docs ).
Vea aquí para una comparación del rendimiento de io HDF5, csv y SQL con pandas: http://pandas.pydata.org/pandas-docs/stable/io.html#performance-considerations
Y otra pregunta posiblemente relevante: flujos de trabajo de "datos grandes" utilizando pandas
Estoy usando pandas para analizar los archivos de datos grandes aquí: http://www.nielda.co.uk/betfair/data/ Son de alrededor de 100 megas de tamaño.
Cada carga de csv tarda unos segundos y luego más tiempo para convertir las fechas.
He intentado cargar los archivos, convirtiendo las fechas de cadenas a tiempos de datos y luego volviéndolos a guardar como archivos pickle. Pero cargar esos también toma algunos segundos.
¿Qué métodos rápidos puedo usar para cargar / guardar los datos del disco?
Una cosa a verificar es el rendimiento real del sistema de disco en sí. Especialmente si utiliza discos giratorios (no SSD), la velocidad de lectura práctica de su disco puede ser uno de los factores que explican el rendimiento. Por lo tanto, antes de realizar demasiadas optimizaciones, verifique si leer los mismos datos en la memoria (por ejemplo, mydata = open(''myfile.txt'').read()
) toma una cantidad de tiempo equivalente. (Solo asegúrese de no ser mordido por los cachés de disco; si carga los mismos datos dos veces, la segunda vez será mucho más rápido porque los datos ya están en el caché de RAM).
Vea la actualización a continuación antes de creer lo que escribo debajo.
Si su problema es realmente analizar los archivos, entonces no estoy seguro de si alguna solución Python pura lo ayudará. Como sabe la estructura real de los archivos, no necesita utilizar un analizador CSV genérico.
Hay tres cosas para probar, sin embargo:
- Paquete
csv
Python ycsv.reader
- NumPy
genfromtext
- Numpy
loadtxt
El tercero es probablemente más rápido si puedes usarlo con tus datos. Al mismo tiempo, tiene el conjunto más limitado de características. (Que en realidad puede hacerlo rápido.)
Además, las sugerencias dadas en los comentarios de crclayton
, BKay
y EdChum
son buenas.
¡Prueba las diferentes alternativas! Si no funcionan, entonces tendrá que escribir algo en un lenguaje compilado (ya sea compilado en Python o, por ejemplo, C).
Actualización: Creo lo que dice chrisb
continuación, es decir, el analizador de pandas
es rápido.
Entonces, la única forma de acelerar el análisis es escribir un analizador específico de la aplicación en C (u otro lenguaje compilado). El análisis genérico de archivos CSV no es sencillo, pero si se conoce la estructura exacta del archivo, puede haber accesos directos. En cualquier caso, el análisis de los archivos de texto es lento, por lo que si alguna vez puede traducirlo en algo más aceptable (HDF5, NumPy array), la carga solo estará limitada por el rendimiento de E / S.