Great Tables
Make awesome display tables using Python
Great Tables is a Python package for creating publication-quality tables from Pandas or Polars DataFrames. It provides a composable system of table components (headers, footers, stubs, spanners, column labels) that you can mix and match to build display tables for notebooks, Quarto documents, or HTML/image output.
The package emphasizes simplicity for common tasks while offering power for complex formatting needs. It includes built-in methods for formatting currency, dates, and numbers, along with extensive customization options for styling and layout. The package includes 16 sample datasets for testing and learning, and it’s designed specifically for display tables rather than interactive data exploration.
Contributors#
Events featuring Great Tables#
Resources featuring Great Tables#
Polars: The Blazing Fast Python Framework for Modern Clinical Trial Data Exploration
Polars: The Blazing Fast Python Framework for Modern Clinical Trial Data Exploration - Michael Chow, Jeroen Janssens
Abstract: Clinical trials generate complex and standards driven datasets that can slow down traditional data processing tools. This workshop introduces Polars, a cutting-edge Python DataFrame library engineered with a high-performance backend and the Apache Arrow columnar format for blazingly fast data manipulation. Attendees will learn how Polars lays the foundation for the pharmaverse-py, streamlining the data clinical workflow from database querying and complex data wrangling to the potential task of prepping data for regulatory Tables, Figures, and Listings (TFLs). Discover the ‘delightful’ Polars API and how its speed dramatically accelerates both exploratory and regid data tasks in pharmaceutical drug development. The workshop is led by Michael Chow, a Python developer at Posit who is a key contributor to open-source data tools, notably helping to launch the data presentation library Great Tables, and focusing on bringing efficient data analysis patterns to Python.
Resources mentioned in the workshop:
- Polars documentation: https://docs.pola.rs/
- Plotnine documentation: https://plotnine.org/
- pyreadstat: https://github.com/Roche/pyreadstat
- Examples of Great Tables and Pharma TFLs: https://github.com/machow/examples-great-tables-pharma
- UV Python package manager: https://docs.astral.sh/uv


Making Things Nice in Python (Rich Iannone, Posit) | posit::conf(2025)
Making Things Nice in Python
Speaker(s): Rich Iannone
Abstract:
When working on the Great Tables and Pointblank Python packages, we’ve tried to make them ’nice’. These packages give you a lot of convenient options, and a large volume of docs and examples. In the Python world, this might be received differently than it would be in R. Whether it was integrating Polars selectors in Great Tables or accepting a multitude of DataFrames and DB tables in Pointblank, these design choices can be seen as surprising things to established Python developers.
However, I argue it’s good to be doing this! People are benefitting from these approaches. I’ll share a few of these developer stories with the takeaway being that Python packages could and should pay attention to good user experience. posit::conf(2025) Subscribe to posit::conf updates: https://posit.co/about/subscription-management/

Exploring Web APIs | PydyTuesday Uncut #1
Join Michael Chow (open source developer at Posit) and Jeroen Janssens (developer relations engineer at Posit) as they dive into this week’s #PydyTuesday dataset about Web APIs. Tools include uv, Positron, Polars, Plotnine, Great Tables, and the Unix command line.
True to the “PydyTuesday Uncut” title, this video is completely unedited. Every typo, mistake, web search, and “aha!” moment is left in so you can see exactly how others approach a new dataset from scratch.
Things mentioned during the session and related resources:
- Code produced during the session: https://github.com/jeroenjanssens/pydytuesday-uncut/blob/main/2025-06-17/01-start.py
- PydyTuesday https://github.com/posit-dev/pydytuesday
- TidyTuesday https://github.com/rfordatascience/tidytuesday
- Getting Data from the TidyTuesday Repo with Python https://www.youtube.com/watch?v=ol2FrSL5gVU
- Positron IDE https://positron.posit.co
- Data Science at the Command Line https://jeroenjanssens.com/dsatcl/
- Python Polars: The Definitive Guide https://polarsguide.com
- Polars https://pola.rs
- Plotnine https://plotnine.org
- Great Tables https://posit-dev.github.io/great-tables/
- The Big Year https://www.imdb.com/title/tt1053810/
00:00 Introduction 02:46 Getting the data with uv 13:18 Positron IDE 17:42 Importing Polars 23:17 Plotting a bar chart with Plotnine 33:55 Inspecting duplicates 46:30 Handling missing values 58:56 Crafting a great table 1:38:48 Reflection


885: Python Polars: The Definitive Guide — with Jeroen Janssens and Thijs Nieuwdorp
#Python #Polars #Pandas
Jeroen Janssens and Thijs Nieuwdorp are data frame library Polars’ greatest advocates in this episode with @JonKrohnLearns where they discuss their book, Python Polars: The Definitive Guide, best practice for using Polars, why Pandas users are switching to Polars for data frame operations in Python, and how the library reduces memory usage and compute time up to 10x more than Pandas. Listen to the episode to be a part of an O’Reilly giveaway!
This episode is brought to you by: • Trainium2, the latest AI chip from AWS: https://aws.amazon.com/ai/machine-learning/trainium/ • Adverity, the conversational analytics platform: https://eu1.hubs.ly/H0jxK210 • Dell AI Factory with NVIDIA: https://www.dell.com/superdatascience
Interested in sponsoring a SuperDataScience Podcast episode? Email natalie@superdatascience.com for sponsorship information.
In this episode you will learn:
• (00:00:00) Introduction
• (00:04:46) Why Jeroen and Thijs wrote Python Polars: The Definitive Guide
• (00:18:18) Best practices in Polars
• (00:25:08) Why Polars has so many users
• (00:32:37) The benefits of the Great Tables package
• (00:50:05) Jeroen and Thijs’ partnership with NVIDIA and Dell for Python Polars: The Definitive Guide
Additional materials: https://www.superdatascience.com/885

Great Tables 1: Structure, Format, and Style
This workshop is all about using Great Tables to make beautiful tables for publication and display purposes. We believe that effective tables have these things in common:
structuring that aids in the reading of the table well-formatted values, fitting expectations for the field of study styling that reduces time to insight and improves aesthetics These materials are for you if:
• you have some experience with data analysis in Python • you often create reporting that involves summarizations of data • you were often frustrated with making tables for display purposes outside of Python • you found beautiful-looking tables in the wild and wondered: ‘How could I do that?’
Other videos in this series:
Great Tables 2: Introducing Units Notation: https://youtu.be/SN0_vIL1Rhk Great Tables 3: Data Color and Polishing https://youtu.be/Huteb5OmcrA
About us:
Michael Chow, Senior Software Engineer, Posit
Michael is a data scientist and software engineer. He has programmed in Python for well over a decade, and he obtained a PhD in cognitive psychology from Princeton University. His interests include statistical methods, skill acquisition, and human memory.
Richard Iannone, Senior Software Engineer, Posit
Richard is a software engineer and table enthusiast. He’s been vigorously working on making display tables easier to create/display in Python. And generally Rich enjoys creating open source packages so that people can great things in their own work.
Workshop repo: https://github.com/rich-iannone/great-tables-mini-workshop?tab=readme-ov-file Learn more at https://posit-dev.github.io/great-tables/articles/intro.html

Great Tables 2: Introducing Units Notation
This workshop is all about using Great Tables to make beautiful tables for publication and display purposes. We believe that effective tables have these things in common:
structuring that aids in the reading of the table well-formatted values, fitting expectations for the field of study styling that reduces time to insight and improves aesthetics These materials are for you if:
• you have some experience with data analysis in Python • you often create reporting that involves summarizations of data • you were often frustrated with making tables for display purposes outside of Python • you found beautiful-looking tables in the wild and wondered: ‘How could I do that?’
Other videos in this series:
Great Tables 1: Structure, Format, and Style: https://youtu.be/QM7DbsY-nc4 Great Tables 3: Data Color and Polishing https://youtu.be/Huteb5OmcrA
About us:
Michael Chow, Senior Software Engineer, Posit
Michael is a data scientist and software engineer. He has programmed in Python for well over a decade, and he obtained a PhD in cognitive psychology from Princeton University. His interests include statistical methods, skill acquisition, and human memory.
Richard Iannone, Senior Software Engineer, Posit
Richard is a software engineer and table enthusiast. He’s been vigorously working on making display tables easier to create/display in Python. And generally Rich enjoys creating open source packages so that people can great things in their own work.
Workshop repo: https://github.com/rich-iannone/great-tables-mini-workshop?tab=readme-ov-file Learn more at https://posit-dev.github.io/great-tables/articles/intro.html

Great Tables 3: Data Color and Polishing
This workshop is all about using Great Tables to make beautiful tables for publication and display purposes. We believe that effective tables have these things in common:
structuring that aids in the reading of the table well-formatted values, fitting expectations for the field of study styling that reduces time to insight and improves aesthetics These materials are for you if:
• you have some experience with data analysis in Python • you often create reporting that involves summarizations of data • you were often frustrated with making tables for display purposes outside of Python • you found beautiful-looking tables in the wild and wondered: ‘How could I do that?’
Other videos in this series:
Great Tables 1: Structure, Format, and Style: https://youtu.be/QM7DbsY-nc4 Great Tables 2: Introducing Units Notation: https://youtu.be/SN0_vIL1Rhk
About us:
Michael Chow, Senior Software Engineer, Posit
Michael is a data scientist and software engineer. He has programmed in Python for well over a decade, and he obtained a PhD in cognitive psychology from Princeton University. His interests include statistical methods, skill acquisition, and human memory.
Richard Iannone, Senior Software Engineer, Posit
Richard is a software engineer and table enthusiast. He’s been vigorously working on making display tables easier to create/display in Python. And generally Rich enjoys creating open source packages so that people can great things in their own work.
Workshop repo: https://github.com/rich-iannone/great-tables-mini-workshop?tab=readme-ov-file Learn more at https://posit-dev.github.io/great-tables/articles/intro.html

Tables in Python with Great Tables
Tables in Python with Great Tables - Rich Iannone, Michael Chow
Resources mentioned in the workshop:
- Workshop GitHub Repository: https://github.com/rich-iannone/great-tables-mini-workshop
- Great Tables https://posit-dev.github.io/great-tables/articles/intro.html
- {reactable-py} https://github.com/machow/reactable-py
- Save a gt table as a file https://gt.rstudio.com/reference/gtsave.html
- {gto} Insert gt tables into Word documents https://gsk-biostatistics.github.io/gto/
- GT.save https://posit-dev.github.io/great-tables/reference/GT.save.html
- define_units https://posit-dev.github.io/great-tables/reference/define_units.html#great_tables.define_units
- Posit Tables Contest 2024 winners: https://posit.co/blog/2024-table-contest-winners/
Editor’s note: During this workshop, several interruptions from an unwanted and disruptive intruder (commonly referred to as a “Zoom bomber”) occurred. We removed those instances from the recording, however that causes a few of the workshop sections to appear disjointed. We apologize for the inconvenience.
Workshop recorded as part of the 2024 R/Pharma Workshop Series


Build a Python table in under 1 minute using Great Tables
Create wonderful-looking tables directly from Pandas or Polars DataFrames with the Great Tables package.
Typically, Great Tables is used in a notebook environment or within a Quarto document and rendered in HTML or as an image file.
Ready to build some awesome tables? Install from PyPI with: $ pip install great_tables.
GitHub Repo: https://github.com/posit-dev/great-tables Design Philosophy of Great Tables: https://posit-dev.github.io/great-tables/blog/design-philosophy/
We want GREAT tables! | Richard Iannone & Michael Chow | Data Science Hangout
To join future data science hangouts, add it to your calendar here: https://pos.it/dsh - All are welcome! We’d love to see you!
We were recently joined by Rich Iannone and Michael Chow, software engineers at Posit, to chat about their experiences building GT and Great Tables, how they drive community engagement around their packages, and their career advice for package developers.
GT and Great Tables are R and Python packages for creating static tables in R and Python. They were created to fill a need for a good, maintained solution for generating tables with different output types from data frames. They’ve gained loads of popularity, and have an active community of users!
Resources mentioned in the video and zoom chat: Great Tables Blog → https://posit-dev.github.io/great-tables/blog/ 2024 Table Contest Winners → https://posit.co/blog/2024-table-contest-winners/ Contributing to Public Transit Data Analysis and Tooling → https://posit-dev.github.io/great-tables/blog/open-transit-tools/ Tables as Powerful Representational Tools → https://www.researchgate.net/publication/363345970_Tables_as_Powerful_Representational_Tools The MockUp - 10+ Guidelines for Better Tables in R → https://themockup.blog/posts/2021-01-13-10-guidelines-for-better-tables-in-r/ Show Me the Numbers by Stephen Few → https://analyticspress.com/smtn.php Excel spreadsheets to gt package called {forgts} → https://github.com/luisDVA/forgts What They Forgot to Teach You About R → https://rstats.wtf/ David Robinson Talk called “The unreasonable effectiveness of public work” → https://www.youtube.com/watch?v=th79W4rv67g Publication quality tables in 2024 → https://posit.co/blog/what-we-did-with-publication-quality-tables-in-2024/ Great Tables Design Philosophy → https://posit-dev.github.io/great-tables/blog/design-philosophy/ gtsummary-to-excel → https://www.pipinghotdata.com/posts/2024-07-26-gtsummary-to-excel/ happy git with R → https://happygitwithr.com/ freeCodeCamp - how to contribute to open source → https://github.com/freeCodeCamp/how-to-contribute-to-open-source/
If you didn’t join live, one great discussion you missed from the zoom chat was about how people manage their personal and work GitHub accounts, and whether to have one account for all their work or separate accounts for each employer. Let us know YOUR thoughts on this topic below!
► Subscribe to Our Channel Here: https://bit.ly/2TzgcOu
Follow Us Here: Website: https://www.posit.co Hangout: https://pos.it/dsh LinkedIn: https://www.linkedin.com/company/posit-software Bluesky: https://bsky.app/profile/posit.co
Thanks for hanging out with us!
#pythoncontent


Polars, pandas, and Narwhals, oh my! | Marco Gorelli | Data Science Hangout
Welcome back to the Data Science Hangout! This week, we’re joined by Marco Gorelli, a senior software engineer at Quansight Labs and a core developer of Pandas, Polars, and the author of Narwhals. Marco shares his insights on the evolving landscape of data frame libraries in Python, focusing on Polars, its advantages over Pandas, and the role of Narwhals in creating data frame agnostic tools.
Marco discusses his journey into open source, highlighting the importance of finding your niche and contributing to areas that others might find “boring” but are essential for a project’s success. He also emphasizes the significance of fostering welcoming and inclusive open source communities.
This episode explores several key topics: Polars: We learn about Polars’ key features like lazy execution, its performance benefits, and the power of its expressions API. Marco explains how lazy execution can lead to significant performance gains and answers questions about its relevance even when working with smaller datasets.
Narwhals: We discover how Narwhals enables developers to write tools that work seamlessly with various data frame libraries, promoting interoperability and simplifying development workflows.
Open Source Challenges: Marco addresses the challenges of maintaining work-life balance while being deeply involved in open-source projects. He offers practical advice on prioritization and managing the constant influx of tasks and requests.
Resources mentioned in the chat: Pandas: https://pandas.pydata.org/ Polars: https://pola.rs/ Narwhals: https://narwhals-dev.github.io/narwhals/ Awesome Polars: https://github.com/ddotta/awesome-polars Ibis: https://ibis-project.org/ Polars Plugins Tutorial: https://marcogorelli.github.io/polars-plugins-tutorial/ Understanding Polars Expressions: https://www.youtube.com/watch?v=E7cHgN9rd9c Great Tables: https://posit-dev.github.io/great-tables/articles/intro.html Great Tables Blog - Polars Styling: https://posit-dev.github.io/great-tables/blog/polars-styling/ Great Tables Blog - BYODF: https://posit-dev.github.io/great-tables/blog/bring-your-own-df/ Ruff: https://astral.sh/ruff UV: https://docs.astral.sh/uv/ R/Pharma 2024: https://rinpharma.com/ PyladiesCon: https://conference.pyladies.com/ Beeminder: https://www.beeminder.com/ Todoist: https://todoist.com/ Nyctography: https://en.wikipedia.org/wiki/Nyctography
This episode offers valuable insights for anyone working with data in Python, particularly those interested in exploring the benefits of Polars and the power of Narwhals for building data-frame-agnostic tools.
► Subscribe to Our Channel Here: https://bit.ly/2TzgcOu
Follow Us Here: Website: https://www.posit.co LinkedIn: https://www.linkedin.com/company/posit-software
To join future data science hangouts, add to your calendar here: https://pos.it/dsh (All are welcome! We’d love to see you!)
Thanks for hanging out with us!
Richard Iannone - Adequate Tables? No, We Want Great Tables
Tables are great, and we’ve been doing a lot on both the R and Python sides to make it possible to generate aesthetically pleasing tables. The gt package for R has been under continuous development for six years, and there are still so many things we can do to make it better. Great Tables, our new Python package, brings beautiful tables to Python users and provides an API that’s in tune with that ecosystem.
While we have made great strides and unlocked new table-making possibilities for our users, our ambitions are huge! So, we’d like to show you the state of things on this front and also where we intend to go with our collective table efforts.
Talk by Richard Iannone
Slides: https://github.com/rich-iannone/presentations/blob/main/2024-08-13-posit_conf_adequate_tables/gt_GT_talk_posit_conf.pdf GitHub Repo: https://github.com/rich-iannone/presentations/tree/main/2024-08-13-posit_conf_adequate_tables
Great Tables: Make beautiful, publication quality tables in Python | Rich Iannone & Michael Chow
Tables are undeniably useful for data work. We have many great DataFrame libraries available in Python, and they give us flexibility in terms of manipulating data at will, but what happens when presenting tables to others?
It’s nice to display tables. Tables can efficiently carry information, just like plots do, and at times it is the better way of presenting data. Indeed, it is time to bridge the divide between raw DataFrame output and wondrously structured tables suitable for publication.
Now, let us turn our attention to the state of ‘display tables’ in 2024. Let us go over what comprises key components for building effective information displays in tables. It may surprise one how new a well-crafted table can be hewn. We’ll take a look at the combinations of Python packages that fit together to make this important task possible, and marvel together at the tabular results they can provide!
Learn more at https://posit-dev.github.io/great-tables/
Timestamps: 0:00 Intro: Meet Rich and Michael 0:41 What we mean by “publication ready tables” 1:29 Overview of what we’ll talk about in this video 1:44 Table Goals: Ways to make a table beautiful 4:41 Tables made from reproducible code! 5:11 The history of table generation to influence our API 6:15 Our modern take on a table display framework 6:35 The problem with Excel 7:38 Introducing Great Tables! 8:00 Key Ingredients of making a Great Table 8:24 Structure: Title, column spanners and nice column labels 8:52 Format: Compact dollar values and percentages 9:23 Styling: Fill color and bold text 10:09 Imports and Polars Selectors 11:08 Coding the structure 12:27 Coding the format 13:07 Coding the styling 15:03 Putting images and plots in your table cells 15:49 Advanced Design 16:07 .fmt_nanoplot(): Small plots within table cells 19:08 .data_color(): Heat maps in tales 20:51 Powerful and plentiful methods to format cell values 22:48 To sum up: TABLES RULE


Build Captivating Display Tables in Python With Great Tables | Real Python Podcast #214
Do you need help making data tables in Python look interesting and attractive? How can you create beautiful display-ready tables as easily as charts and graphs in Python? This week on the show, we speak with Richard Iannone and Michael Chow from Posit about the Great Tables Python library.
Links from the show: https://realpython.com/podcasts/rpp/214/
Michael and Richard discuss the design philosophy and history behind creating display tables. We dig into the grammar of tables, the background of the project, and an ingenious way to build a collection of examples for a library.
We briefly cover how Richard and Michael started contributing to open source. We also discuss practicing data skills with challenges and resources like Tidy Tuesday.
This episode is sponsored by Mailtrap.
Topics:
- 00:00:00 – Introduction
- 00:02:00 – Michael’s background in open source
- 00:04:07 – Rich’s background in open source
- 00:05:27 – Advice for someone starting out
- 00:08:55 – What do you mean by the term “display” table
- 00:11:32 – What components were missing from other tables?
- 00:13:31 – Using examples to explain features
- 00:16:09 – Why was there an absence of this functionality in Python?
- 00:19:35 – A progressive approach and the grammar of tables
- 00:21:26 – Sponsor: Mailtrap
- 00:22:01 – The design philosophy of great tables
- 00:25:31 – Nanoplots, spark lines, and column spanners
- 00:27:06 – Building a gallery of examples
- 00:28:56 – Heat mapping cells and automatically adjusting text color
- 00:32:54 – Output formats for the tables
- 00:34:46 – Building in accessibility
- 00:36:55 – Dependencies
- 00:37:42 – What is the common workflow?
- 00:41:39 – Video Course Spotlight
- 00:43:15 – Adding graphics
- 00:46:41 – Using a table contest to get examples
- 00:49:47 – quartodoc and documenting the project
- 00:55:00 – Tidy Tuesday and data science community
- 01:00:29 – What are you excited about in the world of Python?
- 01:03:46 – What do you want to learn next?
- 01:08:05 – How can people follow the work you do online?
- 01:09:57 – Thanks and goodbye
Links from the show: https://realpython.com/podcasts/rpp/214/

