awkward
Manipulate JSON-like data with NumPy-like idioms.
What it is and what it does
Awkward Array is a library for working with nested, variable-sized data—such as lists of records with mixed types, missing values, and arbitrary nesting depth—using NumPy-like syntax and performance. It bridges the gap between NumPy's speed (which assumes regular, rectangular arrays) and Python's flexibility for irregular structures. Operations are dynamically typed but compiled to machine code, so slicing, filtering, and applying functions across nested structures runs orders of magnitude faster than equivalent Python loops.
The library depends on numpy for core array operations, awkward-cpp for compiled kernels, and fsspec for optional file-system abstraction. It's designed for data science, physics, and information analysis workflows where data arrives in hierarchical or JSON-like formats. The package is actively maintained, supports current Python versions (3.10–3.14), and has no known security vulnerabilities.
Use it for:
- Process particle physics event data with nested detector records and variable-length hit lists.
- Transform JSON-like API responses into columnar arrays for fast aggregation and filtering.
- Analyze time-series data with variable-length event sequences per entity without reshaping.
- Perform NumPy-style operations on ragged arrays from scientific simulations or sensor networks.
- Build data pipelines that preserve nested structure while applying vectorized transformations.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Awkward Array provides NumPy-like operations on nested, variable-sized data structures—lists, records, mixed types, and missing values—with compiled performance and dynamic typing.
Yes. Awkward Array is production-stable, actively maintained, has no security issues, and solves a real problem: fast operations on irregular nested data. Install it if your workflow involves JSON-like structures, ragged arrays, or hierarchical data that NumPy alone cannot handle efficiently. The low install friction and permissive license make it a low-risk addition.
Install
awkward on PyPI
pip
pip install awkwarduv
uv add awkwardpoetry
poetry add awkwardInstalling awkward
Before you install
Low friction: pure Python package with a precompiled C++ dependency (awkward-cpp) that ships as a wheel for common platforms. Active maintenance with a recent release and no known vulnerabilities.
License in practice
BSD-3-Clause is permissive; you may use, modify, and distribute this package freely in commercial and private projects, provided you include the license notice.
Quickstart
pip install awkward
import awkward as ak
import numpy as np
array = ak.Array([{"x": 1.1, "y": [1]}, {"x": 2.2, "y": [1, 2]}])
result = np.square(array["y", ..., 1:])
Requires Python 3.10 or later. If awkward-cpp wheels are unavailable for your platform, pip will attempt to build from source, requiring a C++ compiler.
Verify before relying
- Whether fsspec integration is documented and what file-system operations it enables.
- Performance characteristics on datasets larger than the 10 million-element example cited in the description.
Package facts
| License | BSD-3-Clause (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 6 — awkward-cpp, fsspec, importlib-metadata, numpy, packaging, typing-extensions |
| Maintenance | actively maintained — 0 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 1,425,625/month — #3,917 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: awkward-2.13.0-py3-none-any.whl
Tags
More Software Development packages
Provides backported and experimental type hints…
permissive · top 100 on PyPI
numpyNumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
fastapiFastAPI is a Python web framework for building…
permissive · top 100 on PyPI
annotated-docProvides a way to document function parameters,…
permissive · top 100 on PyPI
typerTyper builds command-line applications from…
permissive · top 1,000 on PyPI
distlibDistlib provides low-level packaging utilities…
permissive · top 1,000 on PyPI
awkward-cppProvides compiled C++ kernels and extensions…
permissive · top 5,000 on PyPI
awkward-pandasExtends pandas DataFrames to store and…
permissive · top 15,000 on PyPI
awkward0Manipulates complex, non-rectangular data…
permissive · top 15,000 on PyPI
dask-awkwardDask-awkward integrates Awkward Array with Dask…
permissive · top 15,000 on PyPI
nclsNCLS provides a fast interval overlap query…
permissive · top 15,000 on PyPI
json-normalizeRecursively flattens nested JSON-like…
permissive · top 15,000 on PyPI
snuggsSnuggs evaluates s-expressions (Lisp-like…
permissive · top 15,000 on PyPI
tiledbTileDB-Py provides a Python interface to the…
permissive · top 15,000 on PyPI
mo-dotsProvides null-safe dot-notation access to…
copyleft · top 15,000 on PyPI
flatdictFlattens nested dictionaries into single-level…
permissive · top 5,000 on PyPI