--- title: "Polars" sidebarTitle: "Polars & Arrow" availability: oss: available enterprise: available summary: >- Polars data goes into `create_table`, and query results come back as Polars DataFrames, for local and deployment tables alike; a LazyFrame over a whole table is local only. --- import { PyPlatformsPolarsCreateTable, PyPlatformsPolarsImports, PyPlatformsPolarsLazyframe, PyPlatformsPolarsPydantic, PyPlatformsPolarsVectorSearch, } from '/snippets/integrations.mdx'; LanceDB supports [Polars](https://github.com/pola-rs/polars), a blazingly fast DataFrame library for Python written in Rust. Under the hood, both Lance and Polars speak Arrow, so passing data back and forth stays zero-copy and ergonomic. ## Create and Query a Table {#create-and-query-a-table} Import the required libraries, including the optional Pydantic helpers if you plan to define schemas. {PyPlatformsPolarsImports} Build a Polars `DataFrame`, convert it to Arrow, and use it directly when creating a LanceDB table. {PyPlatformsPolarsCreateTable} Run vector search and keep the results as a Polars `DataFrame` for further processing or visualization. {PyPlatformsPolarsVectorSearch} ## Work with LazyFrames {#work-with-lazyframes} When you want to operate on the entire table (potentially larger than RAM), convert to a Polars `LazyFrame` so you can chain transformations without loading everything at once. This works for local tables only; against a deployment, `search(...).to_polars()` returns an eager DataFrame of query results. {PyPlatformsPolarsLazyframe} ## Define Schemas with Pydantic {#define-schemas-with-pydantic} You can also describe your table via `LanceModel` and continue ingesting data from Polars. This is useful when multiple teams share a schema or when you want validation. {PyPlatformsPolarsPydantic}