Tabla resumen
| Aspecto | pandas | DataStore |
|---|---|---|
| Ejecución | Inmediata | Diferida |
| Tipos de retorno | DataFrame/Series | DataStore/ColumnExpr |
| Orden de las filas | Se conserva | Se conserva (automáticamente); no está garantizado en el modo de rendimiento |
| inplace | Admitido | No admitido |
| Índice | Compatibilidad completa | Simplificado |
| Memoria | Todos los datos en memoria | Los datos permanecen en el origen |
1. Ejecución diferida frente a ejecución inmediata
pandas (inmediato)
DataStore (diferido)
Por qué es importante
- Optimización de consultas: Varias operaciones se compilan en una sola consulta SQL
- Poda de columnas: Solo se leen las columnas necesarias
- Ejecución de filtros en el origen: Los filtros se aplican en el origen
- Uso eficiente de la memoria: No se cargan datos innecesarios
2. Tipos de retorno
pandas
DataStore
Conversión a tipos de pandas
3. Desencadenantes de ejecución
| Desencadenante | Ejemplo | Notas |
|---|---|---|
print() / repr() | print(ds) | La visualización requiere datos |
len() | len(ds) | Se necesita el recuento de filas |
.columns | ds.columns | Se necesitan los nombres de las columnas |
.dtypes | ds.dtypes | Se necesita información sobre los tipos |
.shape | ds.shape | Se necesitan las dimensiones |
.values | ds.values | Se necesitan los datos reales |
.index | ds.index | Se necesita el índice |
to_df() | ds.to_df() | Conversión explícita |
| Iteración | for row in ds | Se necesita iterar |
equals() | ds.equals(other) | Se necesita la comparación |
Operaciones que permanecen diferidas
| Operación | Devuelve |
|---|---|
filter() | DataStore |
select() | DataStore |
sort() | DataStore |
groupby() | LazyGroupBy |
join() | DataStore |
ds['col'] | ColumnExpr |
ds[['a', 'b']] | DataStore |
ds[condition] | DataStore |
4. Orden de filas
pandas
DataStore
rowNumberInAllBlocks()) para garantizar la coherencia del orden con pandas.
Cuando se conserva el orden
- Fuentes de archivos (CSV, Parquet, JSON, etc.)
- Fuentes de DataFrame de pandas
- Operaciones de filtro
- Selección de columnas
- Después de una llamada explícita a
sort()osort_values() - Operaciones que definen el orden (
nlargest(),nsmallest(),head(),tail())
Cuándo el orden puede variar
- Después de las agregaciones de
groupby()(utilicesort_values()para garantizar un orden coherente) - Después de
merge()/join()con ciertos tipos de join - En modo de rendimiento (
config.use_performance_mode()): el orden de las filas no está garantizado en ninguna operación. Consulte Modo de rendimiento.
5. Sin parámetro inplace
pandas
DataStore
inplace=True no se admite. Asigna siempre el resultado:
¿Por qué no usar inplace?
- La construcción de consultas (evaluación diferida)
- La seguridad en entornos multihilo
- Una depuración más sencilla
- Un código más limpio
6. Soporte de índices
pandas
DataStore
La fuente de DataStore importa
- Fuente DataFrame: Conserva el índice de pandas
- Fuente File: Usa un índice entero simple
7. Comportamiento de las comparaciones
Comparación con pandas
Uso de equals()
8. Inferencia de tipos
pandas
DataStore
Conversión explícita
9. Modelo de memoria
pandas
DataStore
10. Mensajes de error
Diferentes fuentes de errores
- errores de pandas: De la biblioteca pandas
- errores de DataStore: De chDB o ClickHouse
Consejos de depuración
Lista de comprobación para la migración
- Cambie la instrucción de importación
- Elimine los parámetros
inplace=True - Añada
to_df()de forma explícita cuando se requiera un DataFrame de pandas - Añada ordenación si el orden de las filas es importante
- Use
to_pandas()para las pruebas de comparación - Haga pruebas con tamaños de datos representativos
Referencia rápida
| pandas | DataStore |
|---|---|
df[condition] | Igual (devuelve DataStore) |
df.groupby() | Igual (devuelve LazyGroupBy) |
df.drop(inplace=True) | ds = ds.drop() |
df.equals(other) | ds.to_pandas().equals(other) |
df.loc['label'] | ds.to_df().loc['label'] |
print(df) | Igual (ejecuta la operación) |
len(df) | Igual (ejecuta la operación) |