[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-10430":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":24,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":44,"readmeContent":45,"aiSummary":46,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":47,"discoverSource":48},10430,"ibis","ibis-project\u002Fibis","ibis-project","the portable Python dataframe library","https:\u002F\u002Fibis-project.org",null,"Python",6572,729,88,407,0,2,9,49,77.99,"Apache License 2.0",false,"main",true,[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"bigquery","clickhouse","database","datafusion","duckdb","impala","mssql","mysql","pandas","polars","postgresql","pyarrow","pyspark","python","snowflake","sql","sqlite","trino","2026-06-12 04:00:50","# Ibis\n\n[![Documentation status](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-docs.ibis--project.org-blue.svg)](http:\u002F\u002Fibis-project.org)\n[![Project chat](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fzulip-join_chat-purple.svg?logo=zulip)](https:\u002F\u002Fibis-project.zulipchat.com)\n[![Anaconda badge](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fibis-framework\u002Fbadges\u002Fversion.svg)](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fibis-framework)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fibis-framework.svg)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fibis-framework)\n[![Build status](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Factions\u002Fworkflows\u002Fibis-main.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Factions\u002Fworkflows\u002Fibis-main.yml?query=branch%3Amain)\n[![Build status](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Factions\u002Fworkflows\u002Fibis-backends.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Factions\u002Fworkflows\u002Fibis-backends.yml?query=branch%3Amain)\n[![Codecov branch](https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgithub\u002Fibis-project\u002Fibis\u002Fmain.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fibis-project\u002Fibis)\n\n## What is Ibis?\n\nIbis is the portable Python dataframe library:\n\n- Fast local dataframes (via DuckDB by default)\n- Lazy dataframe expressions\n- Interactive mode for iterative data exploration\n- [Compose Python dataframe and SQL code](#python--sql-better-together)\n- Use the same dataframe API for [more than 20 backends](#backends)\n- Iterate locally and deploy remotely by [changing a single line of code](#portability)\n\nSee the documentation on [\"Why Ibis?\"](https:\u002F\u002Fibis-project.org\u002Fwhy) to learn more.\n\n## Getting started\n\nYou can `pip install` Ibis with a backend and example data:\n\n```bash\npip install 'ibis-framework[duckdb,examples]'\n```\n\n> 💡 **Tip**\n>\n> See the [installation guide](https:\u002F\u002Fibis-project.org\u002Finstall) for more installation options.\n\nThen use Ibis:\n\n```python\n>>> import ibis\n>>> ibis.options.interactive = True\n>>> t = ibis.examples.penguins.fetch()\n>>> t\n┏━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┓\n┃ species ┃ island    ┃ bill_length_mm ┃ bill_depth_mm ┃ flipper_length_mm ┃ body_mass_g ┃ sex    ┃ year  ┃\n┡━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━┩\n│ string  │ string    │ float64        │ float64       │ int64             │ int64       │ string │ int64 │\n├─────────┼───────────┼────────────────┼───────────────┼───────────────────┼─────────────┼────────┼───────┤\n│ Adelie  │ Torgersen │           39.1 │          18.7 │               181 │        3750 │ male   │  2007 │\n│ Adelie  │ Torgersen │           39.5 │          17.4 │               186 │        3800 │ female │  2007 │\n│ Adelie  │ Torgersen │           40.3 │          18.0 │               195 │        3250 │ female │  2007 │\n│ Adelie  │ Torgersen │           NULL │          NULL │              NULL │        NULL │ NULL   │  2007 │\n│ Adelie  │ Torgersen │           36.7 │          19.3 │               193 │        3450 │ female │  2007 │\n│ Adelie  │ Torgersen │           39.3 │          20.6 │               190 │        3650 │ male   │  2007 │\n│ Adelie  │ Torgersen │           38.9 │          17.8 │               181 │        3625 │ female │  2007 │\n│ Adelie  │ Torgersen │           39.2 │          19.6 │               195 │        4675 │ male   │  2007 │\n│ Adelie  │ Torgersen │           34.1 │          18.1 │               193 │        3475 │ NULL   │  2007 │\n│ Adelie  │ Torgersen │           42.0 │          20.2 │               190 │        4250 │ NULL   │  2007 │\n│ …       │ …         │              … │             … │                 … │           … │ …      │     … │\n└─────────┴───────────┴────────────────┴───────────────┴───────────────────┴─────────────┴────────┴───────┘\n>>> g = t.group_by(\"species\", \"island\").agg(count=t.count()).order_by(\"count\")\n>>> g\n┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓\n┃ species   ┃ island    ┃ count ┃\n┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩\n│ string    │ string    │ int64 │\n├───────────┼───────────┼───────┤\n│ Adelie    │ Biscoe    │    44 │\n│ Adelie    │ Torgersen │    52 │\n│ Adelie    │ Dream     │    56 │\n│ Chinstrap │ Dream     │    68 │\n│ Gentoo    │ Biscoe    │   124 │\n└───────────┴───────────┴───────┘\n```\n\n> 💡 **Tip**\n>\n> See the [getting started tutorial](https:\u002F\u002Fibis-project.org\u002Ftutorials\u002Fbasics) for a full introduction to Ibis.\n\n## Python + SQL: better together\n\nFor most backends, Ibis works by compiling its dataframe expressions into SQL:\n\n```python\n>>> ibis.to_sql(g)\nSELECT\n  \"t1\".\"species\",\n  \"t1\".\"island\",\n  \"t1\".\"count\"\nFROM (\n  SELECT\n    \"t0\".\"species\",\n    \"t0\".\"island\",\n    COUNT(*) AS \"count\"\n  FROM \"penguins\" AS \"t0\"\n  GROUP BY\n    1,\n    2\n) AS \"t1\"\nORDER BY\n  \"t1\".\"count\" ASC\n```\n\nYou can mix SQL and Python code:\n\n```python\n>>> a = t.sql(\"SELECT species, island, count(*) AS count FROM penguins GROUP BY 1, 2\")\n>>> a\n┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓\n┃ species   ┃ island    ┃ count ┃\n┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩\n│ string    │ string    │ int64 │\n├───────────┼───────────┼───────┤\n│ Adelie    │ Torgersen │    52 │\n│ Adelie    │ Biscoe    │    44 │\n│ Adelie    │ Dream     │    56 │\n│ Gentoo    │ Biscoe    │   124 │\n│ Chinstrap │ Dream     │    68 │\n└───────────┴───────────┴───────┘\n>>> b = a.order_by(\"count\")\n>>> b\n┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓\n┃ species   ┃ island    ┃ count ┃\n┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩\n│ string    │ string    │ int64 │\n├───────────┼───────────┼───────┤\n│ Adelie    │ Biscoe    │    44 │\n│ Adelie    │ Torgersen │    52 │\n│ Adelie    │ Dream     │    56 │\n│ Chinstrap │ Dream     │    68 │\n│ Gentoo    │ Biscoe    │   124 │\n└───────────┴───────────┴───────┘\n```\n\nThis allows you to combine the flexibility of Python with the scale and performance of modern SQL.\n\n## Backends\n\nIbis supports more than 20 backends:\n\n- [Apache DataFusion](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fdatafusion\u002F)\n- [Apache Druid](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fdruid\u002F)\n- [Apache Flink](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fflink)\n- [Apache Impala](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fimpala\u002F)\n- [Apache PySpark](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fpyspark\u002F)\n- [Athena](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fathena\u002F)\n- [BigQuery](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fbigquery\u002F)\n- [ClickHouse](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fclickhouse\u002F)\n- [Databricks](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fdatabricks\u002F)\n- [DuckDB](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fduckdb\u002F)\n- [Exasol](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fexasol)\n- [Materialize](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fmaterialize\u002F)\n- [MySQL](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fmysql\u002F)\n- [Oracle](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Foracle\u002F)\n- [Polars](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fpolars\u002F)\n- [PostgreSQL](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fpostgresql\u002F)\n- [RisingWave](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Frisingwave\u002F)\n- [SingleStoreDB](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fsinglestoredb\u002F)\n- [SQL Server](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fmssql\u002F)\n- [SQLite](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fsqlite\u002F)\n- [Snowflake](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Fsnowflake)\n- [Trino](https:\u002F\u002Fibis-project.org\u002Fbackends\u002Ftrino\u002F)\n\n## How it works\n\nMost Python dataframes are tightly coupled to their execution engine. And many databases only support SQL, with no Python API. Ibis solves this problem by providing a common API for data manipulation in Python, and compiling that API into the backend’s native language. This means you can learn a single API and use it across any supported backend (execution engine).\n\nIbis broadly supports two types of backend:\n\n1. SQL-generating backends\n2. DataFrame-generating backends\n\n![Ibis backend types](.\u002Fdocs\u002Fimages\u002Fbackends.png)\n\n## Portability\n\nTo use different backends, you can set the backend Ibis uses:\n\n```python\n>>> ibis.set_backend(\"duckdb\")\n>>> ibis.set_backend(\"polars\")\n>>> ibis.set_backend(\"datafusion\")\n```\n\nTypically, you'll create a connection object:\n\n```python\n>>> con = ibis.duckdb.connect()\n>>> con = ibis.polars.connect()\n>>> con = ibis.datafusion.connect()\n```\n\nAnd work with tables in that backend:\n\n```python\n>>> con.list_tables()\n['penguins']\n>>> t = con.table(\"penguins\")\n```\n\nYou can also read from common file formats like CSV or Apache Parquet:\n\n```python\n>>> t = con.read_csv(\"penguins.csv\")\n>>> t = con.read_parquet(\"penguins.parquet\")\n```\n\nThis allows you to iterate locally and deploy remotely by changing a single line of code.\n\n> 💡 **Tip**\n>\n> Check out [the blog on backend agnostic arrays](https:\u002F\u002Fibis-project.org\u002Fposts\u002Fbackend-agnostic-arrays\u002F) for one example using the same code across DuckDB and BigQuery.\n\n## Community and contributing\n\nIbis is an open source project and welcomes contributions from anyone in the community.\n\n- Read [the contributing guide](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Fblob\u002Fmain\u002Fdocs\u002FCONTRIBUTING.md).\n- We care about keeping the community welcoming for all. Check out [the code of conduct](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Fblob\u002Fmain\u002FCODE_OF_CONDUCT.md).\n- The Ibis project is open sourced under the [Apache License](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fibis\u002Fblob\u002Fmain\u002FLICENSE.txt).\n\nJoin our community by interacting on GitHub or chatting with us on [Zulip](https:\u002F\u002Fibis-project.zulipchat.com\u002F).\n\nFor more information visit https:\u002F\u002Fibis-project.org\u002F.\n\n## Governance\n\nThe Ibis project is an [independently governed](https:\u002F\u002Fgithub.com\u002Fibis-project\u002Fgovernance\u002Fblob\u002Fmain\u002Fgovernance.md) open source community project to build and maintain the portable Python dataframe library. Ibis has contributors across a range of data companies and institutions.\n","Ibis 是一个可移植的 Python 数据框库，旨在提供跨多种后端的数据处理能力。其核心功能包括快速本地数据框（默认使用 DuckDB）、延迟计算的数据框表达式、支持交互式数据探索，并允许用户通过统一的 API 接口操作超过 20 种不同的数据库或数据处理引擎。此外，Ibis 还能够无缝地将 Python 数据框与 SQL 代码结合使用，实现从本地开发到远程部署只需修改少量代码的目标。该项目适用于需要高效、灵活地进行大数据分析和处理的各种场景，特别是当项目需要在不同环境中迁移时。","2026-06-11 03:28:22","top_topic"]