Library / SDK
Kanaries/pygwalker avatar
Kanaries/pygwalker

PyGWalker: Turning a pandas DataFrame Into a Drag-and-Drop Exploration UI

PyGWalker: Turn your dataframe into an interactive UI for visual analysis

15,982 stars887 forksPythonApache-2.0

At a glance

What is it?
PyGWalker wraps the Graphic Walker front end so a pandas, polars or pyarrow table becomes an interactive canvas inside Jupyter. It is a fast way to look at a dataframe and a poor fit as a production dashboard layer.
Who is it for?
Adopt PyGWalker if you already work in Jupyter or a Streamlit script and want to eyeball a dataframe without writing chart code; the pip install is one line and the entry point is a single function call. Do not adopt it as a hosted dashboard or a reporting surface for non-technical stakeholders, because the README describes an exploration interface, not a deployment target.
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 24 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What PyGWalker actually replaces in an EDA session

The repetitive part of exploratory data analysis is not the plotting call, it is the loop. You write a groupby, render a bar chart, notice an outlier, filter, re-render, and repeat. PyGWalker collapses that loop into one call: the README describes the library as turning a pandas dataframe into an interactive user interface for visual exploration, where fields are dragged onto shelves instead of being encoded in matplotlib or plotly arguments. The intended user is a data scientist already inside a notebook. The README frames the benefit as simplifying the Jupyter Notebook workflow, and the topics list on the repository includes tableau-alternative, which tells you the mental model the maintainers have in mind: shelf-based chart building rather than imperative plot construction. If your work is a one-off static figure for a paper, this is more machinery than you need. If your work is forty iterations over the same table, it removes most of the typing.

The mechanism: a Python binding over the Graphic Walker front end

PyGWalker is not a plotting library. It is a bridge. The name is an abbreviation of Python binding of Graphic Walker, and the README points at Kanaries/graphic-walker as the open-source Tableau alternative doing the rendering. The Python side takes your dataframe, hands the schema and data to that front end, and the front end draws the shelves, the drag-and-drop canvas and the chart. That architecture explains the dependency list in pyproject.toml: duckdb, pyarrow, sqlglot and sqlalchemy are present because queries against the dataframe are compiled and executed rather than done in pure pandas, and gw_dsl_parser is pinned to an exact version (0.1.49.1) because the chart specification language is shared with the front end. The practical consequence is that the visual layer is versioned separately from the Python package, and the pinned parser version is what keeps the two in step. It also means the heavy lifting happens in a browser context, so the notebook kernel is not redrawing charts on every drag.

Installing PyGWalker with pip or conda and drawing a first chart

The README gives two package managers. With pip:

bash
pip install pygwalker

or through conda-forge:

bash
conda install -c conda-forge pygwalker

Note the Python floor. pyproject.toml sets requires-python to ">=3.10", so a 3.9 kernel will not resolve the package no matter which installer you use. The optional dependency groups matter for notebooks: there are separate extras named notebook, labv4 and notebook-legacy, and the legacy group pins ipywidgets below 8.0.0 while the modern groups require 8.0.0 or above. Pick the extra that matches your Jupyter version rather than installing bare and debugging widget errors later.

The quick start in the README is two imports:

python
import pandas as pd
import pygwalker as pyg

From there you pass a dataframe to the walker. The README's example files directory includes examples/jupyter_demo.ipynb and examples/gw_config.json, and the repository also ships examples/streamlit_demo.py, examples/gradio_demo.py, examples/dash_demo.py, examples/html_demo.py, examples/marimo_demo.py and examples/web_server_demo.py. Read those before writing your own integration; the config file shows the shape of the settings object the front end accepts. What you should see after the call is an embedded interactive canvas in the notebook output cell with a field list on the left and shelves for rows, columns, color and filters, not a static image.

Where PyGWalker stops being the right tool

The README describes exploration, cleaning and annotation. It does not describe scheduling, access control, alerting or a publishing workflow, and the documentation is silent on those. That silence is the limitation. A PyGWalker view lives inside the process that created it, so a colleague who wants the same view needs the same notebook, the same kernel and the same dataframe. If your requirement is a dashboard that refreshes on a cron and is read by people who do not run Python, this is the wrong layer and you will end up rebuilding the charts elsewhere. There is a second, subtler constraint: the README does not document rollback or version pinning for the front-end assets, so if a Graphic Walker release changes the shelf behaviour, the pinned gw_dsl_parser is your only stated coupling. Treat that pin as load-bearing when you upgrade. Finally, the dependency surface is wide for a visualisation tool. duckdb, pyarrow, sqlalchemy, sqlglot, pydantic, ipywidgets, anywidget and segment-analytics-python are all direct dependencies, and segment-analytics-python is pinned to an exact version (2.2.3). In a locked-down or audited environment, that list is the thing to review before the chart quality.

PyGWalker compared with plotly, Streamlit and Tableau

The most useful comparison is with plotly, because both live in the notebook and both produce interactive output. Plotly is imperative: you decide the mark, the encoding and the layout in code, and the result is a figure you can embed anywhere. PyGWalker is declarative in the other direction: you hand over the table and choose encodings by dragging, and the output is a canvas rather than a figure object. If you need the chart as an artifact in a report, plotly gives you that and PyGWalker does not. Against Streamlit, the difference is where the app boundary sits. Streamlit is a server that reruns a script and renders widgets; PyGWalker renders an exploration canvas inside whatever host you already have, and the repository ships a streamlit_demo.py precisely because the two compose rather than compete. Against Tableau, the README's own framing is that Graphic Walker is an open-source alternative, and the practical gap is governance: Tableau has a server, permissions and a publishing model, and PyGWalker has a notebook cell. The repository also lists GWalkR as the R wrapper and a desktop app for offline, no-code use, so if the notebook is the wrong host there are sibling projects rather than a fork.

Maintenance, release cadence and what the licence permits

The repository is not archived and the last push was on 2026-09-05. Releases are not on a fixed cadence: 0.5.0.1 landed on 2026-04-04, 0.4.9.15 on 2025-04-10, and 0.4.9.14 on 2025-03-05, which is a gap of roughly a year between the 0.4.9.x line and the 0.5.0 line. Plan upgrades as occasional rather than continuous, and read the release notes before moving across a minor version, because the pinned gw_dsl_parser suggests front-end and Python versions move together. The project is Apache-2.0, which permits commercial use, modification and redistribution, and pyproject.toml declares the Apache Software License classifier to match. Apache-2.0 includes an explicit patent grant and requires that you preserve notices and state changes you make. That is the general shape of the licence; whether your organisation's policy accepts it, and how the bundled segment-analytics-python and kanaries_track dependencies interact with your telemetry rules, is a question for your own review, not something the README answers.

Editorial conclusion

Adopt PyGWalker if you already work in Jupyter or a Streamlit script and want to eyeball a dataframe without writing chart code; the pip install is one line and the entry point is a single function call. Do not adopt it as a hosted dashboard or a reporting surface for non-technical stakeholders, because the README describes an exploration interface, not a deployment target. Before committing, verify three things against the version you install: that your Python is 3.10 or newer, that the extra matching your notebook stack (notebook, labv4 or notebook-legacy) resolves cleanly, and whether the front-end assets load in your offline or air-gapped environment, since the README does not document an offline asset path.

Frequently asked questions

How do I install PyGWalker?

The README gives two options: pip install pygwalker, or conda install -c conda-forge pygwalker. The project requires Python 3.10 or newer, and there are separate optional extras for notebook, labv4 and notebook-legacy depending on your Jupyter version.

How do I use PyGWalker in a notebook?

Import pandas and pygwalker, then pass a dataframe to the walker. The README's quick start uses import pandas as pd and import pygwalker as pyg, and the repository ships examples/jupyter_demo.ipynb plus a gw_config.json showing the settings shape.

What is PyGWalker used for?

It turns a pandas, polars or pyarrow table into an interactive interface for visual exploration, cleaning and annotation inside Jupyter. The README describes it as a Python binding of Graphic Walker, an open-source alternative to Tableau.

Is PyGWalker free?

Yes. It is published under the Apache-2.0 licence, which pyproject.toml declares with the Apache Software License classifier, and the README lists open-source and free as a feature.

How does PyGWalker differ from plotly?

Plotly builds a figure from code you write, and the result is a figure object you can export. PyGWalker hands the dataframe to the Graphic Walker front end and you choose encodings by dragging, so the output is an exploration canvas rather than a reusable chart artifact.

Can PyGWalker be used with Streamlit?

The repository includes examples/streamlit_demo.py and pyproject.toml defines a streamlit optional dependency group, so the two are meant to be combined. The README also links a video tutorial covering pygwalker with streamlit.

Official sources

  1. Kanaries/pygwalker on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/kanaries-pygwalker.svg)](https://hysenlabs.com/projects/kanaries-pygwalker)