tutorial tablas seleccionar para leer importar funciones datos crear columnas archivos python csv pandas dataframe

python - tablas - seleccionar columnas de un dataframe pandas



¿Cuál es la forma más rápida de cargar un gran archivo csv en el cuaderno para trabajar con pandas python? (1)

Estoy tratando de subir un archivo csv, que tiene 250 MB. Básicamente 4 millones de filas y 6 columnas de datos de series de tiempo (1 minuto). El procedimiento habitual es:

location = r''C:/Users/Name/Folder_1/Folder_2/file.csv'' df = pd.read_csv(location)

¡Este procedimiento dura unos 20 minutos! Muy preliminar he explorado las siguientes opciones

Me pregunto si alguien ha comparado estas opciones (o más) y hay un claro ganador. Si nadie responde, en el futuro publicaré mis resultados. Simplemente no tengo tiempo en este momento.


Aquí están los resultados de mi comparación de lectura y escritura para el DF (forma: 4000000 x 6, tamaño en memoria 183.1 MB, tamaño de CSV sin comprimir - 492 MB).

Comparación para los siguientes formatos de almacenamiento: ( CSV , CSV.gzip , Pickle , HDF5 [compresión variada]):

read_s write_s size_ratio_to_CSV storage CSV 17.900 69.00 1.000 CSV.gzip 18.900 186.00 0.047 Pickle 0.173 1.77 0.374 HDF_fixed 0.196 2.03 0.435 HDF_tab 0.230 2.60 0.437 HDF_tab_zlib_c5 0.845 5.44 0.035 HDF_tab_zlib_c9 0.860 5.95 0.035 HDF_tab_bzip2_c5 2.500 36.50 0.011 HDF_tab_bzip2_c9 2.500 36.50 0.011

leyendo

escribir / guardar

relación de tamaño de archivo en relación con el archivo CSV sin comprimir

DATOS SIN PROCESAR:

CSV:

In [68]: %timeit df.to_csv(fcsv) 1 loop, best of 3: 1min 9s per loop In [74]: %timeit pd.read_csv(fcsv) 1 loop, best of 3: 17.9 s per loop

CSV.gzip:

In [70]: %timeit df.to_csv(fcsv_gz, compression=''gzip'') 1 loop, best of 3: 3min 6s per loop In [75]: %timeit pd.read_csv(fcsv_gz) 1 loop, best of 3: 18.9 s per loop

Conservar en vinagre:

In [66]: %timeit df.to_pickle(fpckl) 1 loop, best of 3: 1.77 s per loop In [72]: %timeit pd.read_pickle(fpckl) 10 loops, best of 3: 173 ms per loop

HDF ( format=''fixed'' ) [Predeterminado]:

In [67]: %timeit df.to_hdf(fh5, ''df'') 1 loop, best of 3: 2.03 s per loop In [73]: %timeit pd.read_hdf(fh5, ''df'') 10 loops, best of 3: 196 ms per loop

HDF ( format=''table'' ):

In [37]: %timeit df.to_hdf(''D://temp//.data//37010212_tab.h5'', ''df'', format=''t'') 1 loop, best of 3: 2.6 s per loop In [38]: %timeit pd.read_hdf(''D://temp//.data//37010212_tab.h5'', ''df'') 1 loop, best of 3: 230 ms per loop

HDF ( format=''table'', complib=''zlib'', complevel=5 ):

In [40]: %timeit df.to_hdf(''D://temp//.data//37010212_tab_compress_zlib5.h5'', ''df'', format=''t'', complevel=5, complib=''zlib'') 1 loop, best of 3: 5.44 s per loop In [41]: %timeit pd.read_hdf(''D://temp//.data//37010212_tab_compress_zlib5.h5'', ''df'') 1 loop, best of 3: 854 ms per loop

HDF ( format=''table'', complib=''zlib'', complevel=9 ):

In [36]: %timeit df.to_hdf(''D://temp//.data//37010212_tab_compress_zlib9.h5'', ''df'', format=''t'', complevel=9, complib=''zlib'') 1 loop, best of 3: 5.95 s per loop In [39]: %timeit pd.read_hdf(''D://temp//.data//37010212_tab_compress_zlib9.h5'', ''df'') 1 loop, best of 3: 860 ms per loop

HDF ( format=''table'', complib=''bzip2'', complevel=5 ):

In [42]: %timeit df.to_hdf(''D://temp//.data//37010212_tab_compress_bzip2_l5.h5'', ''df'', format=''t'', complevel=5, complib=''bzip2'') 1 loop, best of 3: 36.5 s per loop In [43]: %timeit pd.read_hdf(''D://temp//.data//37010212_tab_compress_bzip2_l5.h5'', ''df'') 1 loop, best of 3: 2.5 s per loop

HDF ( format=''table'', complib=''bzip2'', complevel=9 ):

In [42]: %timeit df.to_hdf(''D://temp//.data//37010212_tab_compress_bzip2_l9.h5'', ''df'', format=''t'', complevel=9, complib=''bzip2'') 1 loop, best of 3: 36.5 s per loop In [43]: %timeit pd.read_hdf(''D://temp//.data//37010212_tab_compress_bzip2_l9.h5'', ''df'') 1 loop, best of 3: 2.5 s per loop

PD: no puedo probar la feather en mi portátil con Windows

Información del DF:

In [49]: df.shape Out[49]: (4000000, 6) In [50]: df.info() <class ''pandas.core.frame.DataFrame''> RangeIndex: 4000000 entries, 0 to 3999999 Data columns (total 6 columns): a datetime64[ns] b datetime64[ns] c datetime64[ns] d datetime64[ns] e datetime64[ns] f datetime64[ns] dtypes: datetime64[ns](6) memory usage: 183.1 MB In [41]: df.head() Out[41]: a b c / 0 1970-01-01 00:00:00 1970-01-01 00:01:00 1970-01-01 00:02:00 1 1970-01-01 00:01:00 1970-01-01 00:02:00 1970-01-01 00:03:00 2 1970-01-01 00:02:00 1970-01-01 00:03:00 1970-01-01 00:04:00 3 1970-01-01 00:03:00 1970-01-01 00:04:00 1970-01-01 00:05:00 4 1970-01-01 00:04:00 1970-01-01 00:05:00 1970-01-01 00:06:00 d e f 0 1970-01-01 00:03:00 1970-01-01 00:04:00 1970-01-01 00:05:00 1 1970-01-01 00:04:00 1970-01-01 00:05:00 1970-01-01 00:06:00 2 1970-01-01 00:05:00 1970-01-01 00:06:00 1970-01-01 00:07:00 3 1970-01-01 00:06:00 1970-01-01 00:07:00 1970-01-01 00:08:00 4 1970-01-01 00:07:00 1970-01-01 00:08:00 1970-01-01 00:09:00

Tamaños de archivo:

{ .data } » ls -lh 37010212.* /d/temp/.data -rw-r--r-- 1 Max None 492M May 3 22:21 37010212.csv -rw-r--r-- 1 Max None 23M May 3 22:19 37010212.csv.gz -rw-r--r-- 1 Max None 214M May 3 22:02 37010212.h5 -rw-r--r-- 1 Max None 184M May 3 22:02 37010212.pickle -rw-r--r-- 1 Max None 215M May 4 10:39 37010212_tab.h5 -rw-r--r-- 1 Max None 5.4M May 4 10:46 37010212_tab_compress_bzip2_l5.h5 -rw-r--r-- 1 Max None 5.4M May 4 10:51 37010212_tab_compress_bzip2_l9.h5 -rw-r--r-- 1 Max None 17M May 4 10:42 37010212_tab_compress_zlib5.h5 -rw-r--r-- 1 Max None 17M May 4 10:36 37010212_tab_compress_zlib9.h5

Conclusión:

Pickle y HDF5 son mucho más rápidos, pero HDF5 es más conveniente: puede almacenar múltiples tablas / marcos en su interior, puede leer sus datos condicionalmente (observe where parámetro en read_hdf() ), también puede almacenar sus datos comprimidos ( zlib - más rápido, bzip2 : proporciona una mejor relación de compresión), etc.

PD: si puedes construir / usar feather-format , debería ser aún más rápido en comparación con HDF5 y Pickle

PPS: no use Pickle para grandes marcos de datos, ya que puede terminar con SystemError: mensaje de error de retorno sin excepción establecido . También se describe here y here .