A little Python utility for making objects legible

Just say the magic word.

Turn any Python object into a useful summary.

Try our Python Playground
Python object pls.describe(df)
pandas.DataFrame

A pandas DataFrame with 891 rows and 15 columns. Nulls: 869. Memory: 116.9 KB. Columns: deck (str, 688 nulls, cardinality: 7 categories including 'C', 'B', 'D')…

× no LLMs
zero extra dependencies

Quick start

Install

Zero required dependencies. Opt into extras when you're ready.

pip install pretty-little-summary

Usage

One function. Pass it anything. It figures out the rest.

Corrected manners.py
import pretty_little_summary as pls
messy_data = load_nightmare_csv()
print(messy_data) # prints too muchrude.
messy_data.info() # buries the pointtoo much drama.
result = pls.describe(messy_data)much better.
print(result.content)
# A pandas DataFrame with 12,481 rows and 9 columns. Nulls: 342.
# Columns: order_id, customer, region, total, ...

What you get back

A Summary with human-readable content and structured metadata.

result.content
pandas.DataFrame | Shape: (3, 3)
Columns: product, price, quantity

Structured metadata

result.meta
# {"object_type": "pandas.DataFrame",
#  "shape": [3, 3],
#  "columns": ["product", "price", "quantity"]}

Summary object

.content str — formatted summary
.meta dict — structured metadata
.history list — jupyter code lineage

Jupyter history

In notebooks, PLS traces the code that created your object. A tiny time machine.

result = pls.describe(df_filtered)
print(result.history)

# ['df = pd.read_csv("data.csv")',
#  'df_clean = df.dropna()',
#  'df_filtered = df_clean[df_clean["value"] > 100]']