| title | FAQ |
|---|---|
| description | Common questions about compatibility, performance, and migration. |
| order | 10 |
| section | Project |
Not fully. The API is intentionally Pandas-like, but full parity is not the current goal. Use explicit compatibility checks at critical boundaries.
Use .lazy() when you have long transformation chains and want to defer execution until collect(). For quick interactive work, eager mode is often simpler.
Yes. NDArray implements NumPy protocol hooks, so many ufuncs and array functions interoperate directly.
You can also choose array execution backends (auto, numpy, numexpr, numba, torch, jax, cupy) with set_array_backend(...).
Yes, as optional execution/runtime integrations:
set_backend("ray")andset_backend("dask")for partition execution paths- interchange helpers
from_dask(...)andfrom_ray(...) - conversions
.to_dask()and.to_ray()
FrameX remains single-machine-first; distributed multi-node orchestration is not a primary design target.
Migrate incrementally:
- start with the heaviest ETL stage
- compare outputs with Pandas via
.to_pandas() - expand usage once validated
FrameX supports read/write for:
- Parquet (
.parquet) - ORC (
.orc) - Arrow IPC (
.arrow,.ipc) - CSV/TSV/Text (
.csv,.tsv,.tab,.txt) - Fixed-width text (
.fwf,.fixed,.prn) - JSON / NDJSON (
.json,.jsonl,.ndjson) - Feather (
.feather) - Pickle (
.pkl,.pickle) - Excel (
.xlsx,.xls,.xlsm,.xlsb,.ods) via pandas-compatible backend - SQLite (
.sqlite,.sqlite3,.db,.db3) - Export-only: HTML (
.html,.htm), XML (.xml)
read_file(...) and write_file(...) auto-detect by extension and support compressed wrappers:
.gz, .bz2, .xz, .zip, plus .zst/.zstd when zstandard is installed.
Typical patterns:
import framex as fx
# write/replace a table
fx.write_file(df, "warehouse.sqlite", table="events", if_exists="replace")
# append incremental records
fx.write_file(delta_df, "warehouse.sqlite", table="events", if_exists="append")
# read a table
events = fx.read_file("warehouse.sqlite", table="events")
# read with query
recent = fx.read_file(
"warehouse.sqlite",
query="SELECT * FROM events WHERE event_date >= '2026-01-01'",
)Use runtime config APIs:
set_backend(...)set_workers(...)set_serializer(...)set_kernel_backend(...)set_array_backend(...)
Several tests are optional-backend tests and use pytest.importorskip(...).
They are skipped (not failed) when optional runtimes are missing, especially:
dask.distributed/dask.dataframeray/ray.data
Install optional deps to run those suites:
pip install pyframe-xpy[distributed]
pytest -q