Comparación del formato de almacenamiento de datos de Pandas DataFrame

Pandas admite múltiples formatos de almacenamiento. En este artículo, probaremos y compararemos la velocidad de lectura, la velocidad de escritura y el tamaño de Pandas Dataframe en diferentes formatos de almacenamiento.

Crear un marco de datos de prueba

Primero cree un marco de datos Pandas de prueba que contenga diferentes tipos de datos.

 import pandas as pd
 import random
 import string
 import numpy as np
 
 # Config DF
 df_length= 10**6
 start_date= '2023-01-01'
 all_string= list(string.ascii_letters + string.digits)
 string_length= 10**1
 min_number= 0
 max_number= 10**3
 
 # Create Columns
 date_col= pd.date_range(start= start_date, periods= df_length, freq= 'H')
 str_col= [''.join(np.random.choice(all_string, string_length)) for i in range(df_length)]
 float_col= np.random.rand(df_length)
 int_col= np.random.randint(min_number,max_number, size = df_length)
 
 # Create DataFrame
 df= pd.DataFrame({'date_col' : date_col, 
                   'str_col' : str_col, 
                   'float_col' : float_col, 
                   'int_col' : int_col})
 df.info()
 df.head()

almacenado en un formato diferente

A continuación, cree funciones de prueba para leer y escribir en diferentes formatos.

 import time 
 import os
 
 def check_read_write_size(df, file_name, compression= None) :
     format= file_name.split('.')[-1]
     # Write
     begin= time.time()
     if file_name.endswith('.csv') : df.to_csv(file_name, index= False, compression= compression)
     elif file_name.endswith('.parquet') : df.to_parquet(file_name, compression= compression)
     elif file_name.endswith('.pickle') : df.to_pickle(file_name, compression= compression)
     elif file_name.endswith('.orc') : df.to_orc(file_name)
     elif file_name.endswith('.feather') : df.to_feather(file_name)
     elif file_name.endswith('.h5') : df.to_hdf(file_name, key= 'df')
     write_time= time.time() - begin
     # Read
     begin= time.time()
     if file_name.endswith('.csv') : pd.read_csv(file_name, compression= compression)
     elif file_name.endswith('.parquet') : pd.read_parquet(file_name)
     elif file_name.endswith('.pickle') : pd.read_pickle(file_name, compression= compression)
     elif file_name.endswith('.orc') : pd.read_orc(file_name)
     elif file_name.endswith('.h5') : pd.read_hdf(file_name)
     read_time= time.time() - begin
     # File Size
     file_size_mb = os.path.getsize(file_name) / (1024 * 1024)
     return [format, compression, read_time, write_time, file_size_mb]

Luego ejecute la función y almacene el resultado en otro Pandas Dataframe.

 test_case= [
             ['df.csv','infer'],
             ['df.csv','gzip'],
             ['df.pickle','infer'],
             ['df.pickle','gzip'],
             ['df.parquet','snappy'],
             ['df.parquet','gzip'],
             ['df.orc','default'],
             ['df.feather','default'],
             ['df.h5','default'],
             ]
 
 result= []
 for i in test_case :
     result.append(check_read_write_size(df, i[0], compression= i[1]))
 
 result_df= pd.DataFrame(result, columns= ['format','compression','read_time','write_time','file_size'])
 result_df

Resultados de la prueba

Los gráficos y tablas siguientes son los resultados de las pruebas.

Hacemos un análisis simple de los resultados de la prueba.

CSV

  • Tamaño máximo de archivo sin comprimir
  • El tamaño comprimido es pequeño, pero no el más pequeño.
  • Las velocidades de lectura y escritura de CSV son las más lentas

Pepinillo

  • se comportó promedio
  • Pero la velocidad de escritura por compresión es la más lenta.

Pluma

La velocidad de lectura y escritura más rápida, el tamaño del archivo también es medio, muy medio

ORCO

  • El más pequeño de todos los formatos.
  • Velocidades de lectura y escritura muy rápidas, casi las más rápidas.

Parquet

En general, rápido y muy pequeño, pero no el más rápido ni el más pequeño.

Resumir

A juzgar por los resultados, ¿deberíamos usar ORC o Feather en lugar de CSV?

"Depende de tu sistema".

Si estás haciendo algunos proyectos en solitario, definitivamente tiene sentido utilizar el formato más rápido o más pequeño posible.

Pero la mayoría de las veces tenemos que trabajar con otros. Entonces, hay más factores que la velocidad y el tamaño.

El CSV sin comprimir puede ser lento y grande, pero cuando es necesario enviar los datos a otro sistema, es muy fácil.

Como formato tradicional de procesamiento de big data (de Hive), ORC es el mejor para optimizar la velocidad y el tamaño. Parquet es más grande y más lento que ORC, pero logra el mejor equilibrio entre velocidad y tamaño, y hay muchos ecosistemas que lo admiten. , para que pueda elegir Parquet primero cuando necesite procesar archivos grandes.

https://avoid.overfit.cn/post/387acc48c7dd42a49f7bec90cc6d09ae

Por Chanon Krittapholchai

Supongo que te gusta

Origin blog.csdn.net/m0_46510245/article/details/132685319
Recomendado
Clasificación