Changelog¶
0.3.1 (2026)¶
Changed¶
- Shapefile downloads now use pygris — The internal
_fetch_tiger_shapes()function now delegates to pygris instead of manually constructing Census Bureau URLs. The public API (geometry=True,attach_geometry()) is unchanged.
Added¶
- Automatic shapefile caching — Downloaded shapefiles are cached locally via
pygris (
~/Library/Caches/pygris/on macOS,~/.cache/pygris/on Linux). Repeatedgeometry=Truecalls no longer re-download files. cacheparameter onattach_geometry()— Passcache=Falseto force a fresh download.- Clear error for missing
state— Sub-state geographies (tract,block group,place,puma) now raise aValueErrorwith a helpful message whenstateis omitted.
Fixed¶
- ZCTA and PUMA geometry for pre-2020 years — Previously broken due to hardcoded 2020 vintage suffixes. pygris handles vintage selection correctly.
- Congressional district year mapping — Previously used a hardcoded formula. pygris handles this internally.
Improved¶
- Broader year range — Geometry support extended from ~2014+ to ~1990+ for most geography levels.
- Faster county downloads — County-level queries now pass
statethrough to pygris when provided, downloading a smaller state-specific file.
Dependencies¶
- Added
pygris>=0.1.7,<1to thespatialoptional dependency group.
0.3 (2026)¶
Version bump. No user-facing changes from 0.2.
0.2 (2026)¶
Major release with complete Census API feature parity with R’s tidycensus.
Added¶
-
get_acs()— Retrieve American Community Survey data via the Census API- Tidy and wide output formats
- MOE confidence level scaling (90%, 95%, 99%)
- Summary variable support for proportion calculations
- Geometry attachment (returns GeoDataFrame)
keep_geo_varsoption to preserve raw FIPS columns- Built-in caching with configurable TTL
-
get_decennial()— Retrieve Decennial Census data (2000, 2010, 2020)- Population group support for DHC-A disaggregated data
- Tidy and wide output formats
- Geometry support
-
get_pums()— Load PUMS microdata from the Census API- Server-side variable filtering
- Person and housing replicate weights (80 columns each)
- Variable recoding with human-readable labels
- Multi-state queries
- PUMA-level filtering
-
get_estimates()— Population Estimates Program data- Products: population, components, housing, characteristics
- Breakdown dimensions (age, sex, race, Hispanic origin)
- Time series support
- Vintage-based queries
-
get_flows()— ACS Migration Flows data- County and MSA-level flows
- Breakdown labels from migration recodes
- MOE confidence scaling
- Geometry support for origin geography
-
load_variables()— Browse and search Census variable metadata- In-memory and persistent disk caching
- Search across datasets: acs5, acs1, pl, acs5/subject, acs5/profile
-
MOE functions — Margin of error calculations from ACS General Handbook
moe_sum()— Combined MOE for derived sumsmoe_ratio()— MOE for derived ratiosmoe_prop()— MOE for derived proportionsmoe_product()— MOE for derived productssignificance()— Statistical significance testing
-
Spatial support — Cartographic boundary integration
attach_geometry()— Merge shapefiles with Census dataas_dot_density()— Dot-density point conversioninterpolate_pw()— Population-weighted areal interpolation- Multiple resolution levels: 500k, 5m, 20m
-
Survey design — Replicate weight standard errors
SurveyDesignclass with SDR methodto_survey()helper for PUMS DataFrames- Weighted estimates and means
-
get_survey_metadata()— Census API dataset discovery -
Census helpers
summary_files()— List available decennial summary filesget_pop_groups()— Population groups for DHC-A
-
Reference datasets (
pypums.datasets)fips_codes— State/county FIPS lookup tablelookup_fips()/lookup_name()— FIPS code resolutionmig_recodes— Migration flow labelspums_variables()— PUMS variable dictionaryacs5_geography()— Available ACS5 geographies
-
Geography system — Hierarchical query building for 20+ geography levels
-
Caching system — Parquet-based file caching with SHA256 keys and TTL
-
CLI commands —
pypums acs,pypums decennial,pypums variables,pypums estimates,pypums config
Deprecated¶
ACSclass — Useget_acs()andget_pums()instead
0.0.7 (2020-06-23)¶
- Fixes bug where
_check_data_folder()would ignore thepathparameter - Uses
path.mkdir(..., exists_ok=True) - Adds 2018 to possible survey years
- First contributor! @yonran
0.0.6 (2020-05-23)¶
- Bug fixes (some URLs at the Census website didn’t have
content-size)
0.0.5 (2019-05-11)¶
- Add
.as_dataframe()to ACS class
0.0.4 (2019-05-10)¶
- Add
.download_data()to ACS class
0.0.3 (2019-05-09)¶
- Accidentally released
0.0.2 (2019-05-09)¶
- Add
ACS()class for Python interface
0.0.1 (2019-04-29)¶
- First release on PyPI