A Python library for reading, writing, and analyzing geospatial vector data; use it when you need spatial operations (buffer/overlay/join), CRS reprojection, or map visualization on formats like Shapefile/GeoJSON/GeoPackage or PostGIS.
64
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./scientific-skills/Data Analysis/geopandas/SKILL.mdexplore()).set_crs() for metadata, to_crs() for coordinate transformation.(Additional conceptual references: references/data-structures.md, references/data-io.md, references/crs-management.md, references/geometric-operations.md, references/spatial-analysis.md, references/visualization.md.)
Core:
geopandas (latest)pandas (transitive)shapely (transitive)Optional (install as needed):
folium (interactive maps via GeoDataFrame.explore())mapclassify (classification schemes for choropleths)pyarrow (faster I/O; enables use_arrow=True in some writers)psycopg2 and geoalchemy2 (PostGIS connectivity)contextily (basemaps)cartopy (map projections / advanced cartographic plotting)import geopandas as gpd
def main():
# 1) Read vector data (GeoJSON/Shapefile/GeoPackage/etc.)
gdf = gpd.read_file("data.geojson")
# 2) Inspect CRS and geometry types
print("CRS:", gdf.crs)
print("Geometry types:", gdf.geometry.geom_type.unique())
# 3) Reproject for metric calculations (area/distance)
# Use a projected CRS appropriate for your region; EPSG:3857 is common but not always ideal.
gdf_m = gdf.to_crs("EPSG:3857")
# 4) Compute area and create a buffer (units are CRS units; meters in many projected CRSs)
gdf_m["area_m2"] = gdf_m.geometry.area
gdf_m["geometry"] = gdf_m.geometry.buffer(100)
# 5) Plot a quick choropleth (static)
ax = gdf_m.plot(column="area_m2", cmap="YlOrRd", legend=True)
ax.set_title("Buffered features colored by area (m²)")
# 6) Write results to GeoPackage
gdf_m.to_file("output.gpkg", layer="buffered", driver="GPKG")
if __name__ == "__main__":
main()Data model
GeoSeries: a 1D array of geometries with vectorized spatial methods.GeoDataFrame: a pandas DataFrame with a designated geometry column (commonly named geometry).CRS rules
set_crs("EPSG:4326") sets CRS metadata without transforming coordinates (use only when CRS is missing/unknown but you are sure of it).to_crs("EPSG:3857") transforms coordinates into a new CRS.Spatial joins
gpd.sjoin(left, right, predicate="intersects"|"within"|"contains"|...) matches features using a spatial predicate.gpd.sjoin_nearest(..., max_distance=...) performs nearest-neighbor matching; setting max_distance can reduce work and avoid unexpected far matches.Overlay operations
gpd.overlay(gdf1, gdf2, how="intersection"|"union"|"difference"|...) computes polygon overlays; complexity grows with geometry vertex count, so simplifying geometries can improve performance when high precision is not required.I/O performance
use_arrow=True) can speed up read/write operations; pyarrow is typically required.bbox= (and format-specific filters) to avoid loading unnecessary features.geopandas_result.md unless the skill documentation defines a better convention.Run this minimal verification path before full execution when possible:
No local script validation step is required for this skill.Expected output format:
Result file: geopandas_result.md
Validation summary: PASS/FAIL with brief notes
Assumptions: explicit list if anyf5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.