Сводная таблица
| Аспект | pandas | DataStore |
|---|---|---|
| Выполнение | Немедленное | Ленивое (отложенное) |
| Возвращаемые типы | DataFrame/Series | DataStore/ColumnExpr |
| Порядок строк | Сохраняется | Сохраняется (автоматически); не гарантируется в режиме производительности |
| inplace | Поддерживается | Не поддерживается |
| Индекс | Полная поддержка | Упрощённый |
| Память | Все данные в памяти | Данные остаются в источнике |
1. Ленивое и немедленное выполнение
pandas (Немедленное выполнение)
DataStore (ленивое выполнение)
Почему это важно
- Оптимизация запросов: Несколько операций компилируются в один SQL-запрос
- Отсечение столбцов: Считываются только нужные столбцы
- Pushdown фильтров: Фильтры применяются на стороне источника
- Эффективное использование памяти: Не загружайте данные, которые не нужны
2. Типы возвращаемых значений
pandas
DataStore
Преобразование в типы pandas
3. Триггеры выполнения
| Триггер | Пример | Примечания |
|---|---|---|
print() / repr() | print(ds) | Для вывода нужны данные |
len() | len(ds) | Нужно количество строк |
.columns | ds.columns | Нужны имена столбцов |
.dtypes | ds.dtypes | Нужна информация о типах |
.shape | ds.shape | Нужна размерность |
.values | ds.values | Нужны реальные данные |
.index | ds.index | Нужен индекс |
to_df() | ds.to_df() | Явное преобразование |
| Итерация | for row in ds | Нужно пройтись по данным |
equals() | ds.equals(other) | Нужно сравнение |
Операции с ленивым вычислением
| Операция | Возвращает |
|---|---|
filter() | DataStore |
select() | DataStore |
sort() | DataStore |
groupby() | LazyGroupBy |
join() | DataStore |
ds['col'] | ColumnExpr |
ds[['a', 'b']] | DataStore |
ds[condition] | DataStore |
4. Порядок строк
pandas
DataStore
rowNumberInAllBlocks()), чтобы сохранять порядок, согласованный с pandas.
Когда порядок сохраняется
- Источники в виде файлов (CSV, Parquet, JSON и т. д.)
- Источники в виде pandas DataFrame
- Операции фильтрации
- Выбор столбцов
- После явного
sort()илиsort_values() - Операции, задающие порядок (
nlargest(),nsmallest(),head(),tail())
Когда порядок может отличаться
- После агрегаций
groupby()(используйтеsort_values(), чтобы обеспечить единообразный порядок) - После
merge()/join()с некоторыми типами JOIN - В режиме производительности (
config.use_performance_mode()): порядок строк не гарантируется ни для каких операций. См. Режим производительности.
5. Параметр inplace отсутствует
pandas
DataStore
inplace=True не поддерживается. Всегда присваивайте результат:
Почему нет inplace?
- Строить запросы (отложенное вычисление)
- Обеспечивать потокобезопасность
- Упрощать отладку
- Делать код чище
6. Поддержка индексов
pandas
DataStore
Имеет значение источник DataStore
- Источник DataFrame: сохраняет индекс pandas
- Источник File: используется простой целочисленный индекс
7. Особенности сравнения
Сравнение с pandas
Использование функции equals()
8. Вывод типов
pandas
DataStore
Явное приведение типов
9. Модель памяти
pandas
DataStore
10. Сообщения об ошибках
Различные источники ошибок
- ошибки pandas: Из библиотеки pandas
- ошибки DataStore: Из chDB или ClickHouse
Советы по отладке
Чек-лист миграции
- Измените оператор import
- Удалите параметры
inplace=True - Явно добавьте
to_df()там, где требуется pandas DataFrame - Добавьте сортировку, если важен порядок строк
- Используйте
to_pandas()для сравнительных тестов - Протестируйте на репрезентативных объёмах данных
Краткая справка
| pandas | DataStore |
|---|---|
df[condition] | То же (возвращает DataStore) |
df.groupby() | То же (возвращает 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) | То же (инициирует выполнение) |
len(df) | То же (инициирует выполнение) |