cuDF: Running pandas on GPUs without rewriting your code
cuDF - GPU DataFrame Library. cudf.pandas With a Python file containing pandas code: Use cudf.pandas by invoking python with -m cudf.pandas If running the pandas code in an interactive Jupyter environment, call %load_ext cudf.pandas before importing pandas.
At a glance
- What is it?
- cuDF is a GPU-accelerated DataFrame library from the RAPIDS suite, offering a pandas-like API, a zero-code-change accelerator for existing pandas scripts, and a Polars engine. This review covers its architecture, installation, and where it fits and fails.
- Who is it for?
- Adopt cuDF if you have an NVIDIA GPU, work with tabular data that fits in GPU memory, and want to accelerate pandas or Polars workloads without changing your code. Do not adopt it if you lack a compatible GPU, work with datasets larger than GPU memory, or rely on pandas features that cuDF has not implemented.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What cuDF solves and who it targets
cuDF addresses a simple pain: CPU-only pandas and Polars slow down as data grows, and rewriting code for GPUs is expensive. The project, part of NVIDIA's RAPIDS suite, provides a DataFrame library that mirrors the pandas API, so existing code can run on a GPU with minimal changes. The target user is a data engineer or scientist who has pandas scripts that take too long and an NVIDIA GPU sitting idle. The library also targets Polars users via cudf-polars, which lets a Polars lazy query run on the GPU by passing engine="gpu" to collect. The README positions cuDF as a drop-in accelerator, not a new framework. That is the core promise, and the design follows it.
The layered architecture: libcudf, pylibcudf, and the Python API
cuDF is not a single library. The README lists four Python-facing components built on a C++ core. libcudf is a CUDA C++ library with Apache Arrow-compliant data structures and fundamental algorithms. pylibcudf provides Cython bindings to that core. The cudf Python package offers a pandas-like DataFrame API and a zero-code-change accelerator called cudf.pandas. dask-cudf adds a GPU backend for Dask DataFrames, which implies an answer for distributed or out-of-core workloads. The layering means you can use the low-level bindings for custom work, but most users will touch only the top-level cudf package. The separation also means that fixing a bug in the Python layer is distinct from fixing one in the C++ core, which affects maintenance cost.
How cudf.pandas accelerates existing pandas code
The cudf.pandas accelerator works by intercepting pandas imports. The README shows two entry points: running a Python file with python -m cudf.pandas script.py, or in Jupyter calling %load_ext cudf.pandas before importing pandas. The mechanism is not fully detailed in the README, but the implication is that the extension replaces pandas objects with cuDF-backed objects at import time. The user code stays unchanged, as the example demonstrates: the same pd.read_parquet, dropna, and groupby calls run on a GPU. This is a different approach from rewriting code to use cudf directly. The trade-off is that the accelerator must handle whatever pandas code you throw at it, which is harder than supporting a fixed API. The README gives no performance numbers, so you cannot infer speedups from the material alone.
Installation: version-matched CUDA suffixes and package channels
Installation is straightforward but requires attention to your CUDA version. From PyPI, you must append a suffix to each package name: -cu13 for CUDA 13 and -cu12 for CUDA 12. For example, pip install cudf-cu12 installs the stable release for CUDA 12. The README lists five packages to install: libcudf, pylibcudf, cudf, cudf-polars, and dask-cudf. You may not need all of them, but the naming forces you to pick a CUDA major version. Conda users specify the rapidsai channel, and nightly builds come from rapidsai-nightly. The requirement to match the CUDA major version is a real constraint: if your driver supports CUDA 12 but you install the -cu13 wheel, it will not work. The README points to the RAPIDS Installation Guide for system requirements, which suggests that GPU driver and OS compatibility matter beyond the CUDA version.
The Polars engine: a different entry point
cudf-polars is not a pandas clone. It is a GPU engine for Polars' lazy API. The README example shows a Polars lazy frame with drop_nulls and group_by, executed with collect(engine="gpu"). This is a distinct value proposition: Polars users already have a fast CPU library, and cuDF offers a way to push that work to a GPU without changing the query definition. The mechanism relies on Polars' lazy execution model, where the query plan is built first and then executed by an engine. cuDF provides that engine. The limitation, not stated in the README, is that not every Polars expression may be supported by the GPU engine. The README gives only one example, so you would need to check the documentation for supported operations. This is a separate integration from cudf.pandas, and it targets a different user base.
Where cuDF is the wrong tool: memory and feature gaps
The README does not state a memory limit, but GPU memory is finite and far smaller than system RAM on most machines. If your DataFrame exceeds GPU memory, cuDF will fail or spill to host memory, which defeats the purpose. The README mentions dask-cudf as a GPU backend for Dask, which suggests that out-of-core or distributed workloads are handled by Dask, not by cuDF alone. That adds complexity. Another limitation is pandas API coverage. The README says the API is 'largely similar' to pandas, which is a hedge. Some pandas operations, especially those with complex indexing or string manipulations, may not be implemented or may behave differently. If your code relies on a niche pandas feature, cudf.pandas may silently produce wrong results or raise an error. The project is under active development, as the release dates show, but that also means the behavior can change between versions.
Alternatives: Dask, Modin, and Polars on CPU
The main alternative for scaling pandas is Dask, which parallelizes pandas across multiple CPU cores or a cluster. Dask works with data larger than memory by partitioning it, something cuDF does not do on its own. Modin is another option that accelerates pandas by distributing the dataframe across cores, but it also runs on CPU. If you want GPU acceleration without changing code, cuDF is the primary choice, but if your data does not fit in GPU memory, Dask or Modin are more appropriate. For Polars users, the alternative is to stay on the CPU engine, which is already fast for many workloads. The difference is approach: cuDF assumes you have a GPU and want to exploit it, while Dask and Modin assume you have multiple CPU cores and want to scale horizontally. The README mentions dask-cudf, which combines both: Dask for partitioning and cuDF for GPU execution, but that is a separate integration.
Maintenance and license implications
cuDF is licensed under Apache-2.0, which permits commercial use, modification, and redistribution with attribution. The license is permissive, so adopting it does not require open-sourcing your own code. Maintenance cost is a consideration: the project is large, with a C++ core and multiple Python layers, and it is updated frequently. The release history shows three releases in the last few months (v26.08.01, v26.08.00, v26.06.01), indicating an active release cadence. This means you will need to track updates to stay compatible with your CUDA version and to get bug fixes. The README points to a contribution guide for building from source, which suggests that building from source is possible but not trivial. Upgrading cuDF may require upgrading other RAPIDS libraries in lockstep, as the version numbering suggests a coordinated release. You should verify that your pandas or Polars version is compatible with the cuDF release you choose.
Editorial conclusion
Adopt cuDF if you have an NVIDIA GPU, work with tabular data that fits in GPU memory, and want to accelerate pandas or Polars workloads without changing your code. Do not adopt it if you lack a compatible GPU, work with datasets larger than GPU memory, or rely on pandas features that cuDF has not implemented. Before adopting, verify that your CUDA version matches a cuDF release suffix (e.g., -cu12 or -cu13), and test your specific pandas operations, especially groupby and joins, for correctness and speed. The project is actively maintained, but its value depends on your hardware and workload fit.
Community notes