Career Guide

Python for GIS: The 12-Week Learning Path (Built From 1,366 Job Listings)

Some links below are affiliate links — I earn a small commission if you purchase, at no extra cost to you. Every paid resource is paired with a free alternative.


If you've looked at any GIS job listing in the last two years, you know Python matters. If you've read our skills analysis, portfolio guide, or break-in guide, you've seen the data. Python is the #1 skill in GIS job listings, full stop (see our full analysis).

What nobody has built is the plan. Not a list of resources. Not a course catalog. A week-by-week curriculum: here's what you learn Monday, here's your deliverable by Friday, here's what Week 2 builds on.

This is that plan. Twelve weeks. Ten hours per week (two hours per weekday, or longer weekend sessions — whatever fits your schedule). Three portfolio projects. Free tools. Sequenced around what 1,366 employers in our database listed in their job requirements as of Q1 2026 — and what the salary data says about each skill combination.

Coming from data science? You already know Pandas and scikit-learn. Start at Week 4 — Phase 1's general Python won't teach you anything new. Your gap is spatial operations and CRS handling, not coding.

Phase 1 Weeks 1–3

Python Fundamentals

Write standalone scripts

Build: Data processing script
Foundation
Phase 2 Weeks 4–6

Spatial Python

Analyze & map spatial data

Build: Portfolio project #1
~$91K median
Phase 3 Weeks 7–9

GIS Automation

Automate real workflows

Build: Portfolio project #2
~$103K median
Phase 4 Weeks 10–12

Specialization

Cloud, web, or ML deployment

Build: Portfolio project #3
$170K+ median (senior roles)
Why this sequence? Follow the salary data.
Python + ArcGIS Pro
$74K
Python + SQL
$128K
Python + AWS
$173K
Python + ML
$190K
Medians from GEO CAREERS database, Q1 2026. Sample sizes 12–40 salary-reporting listings per combo — directional, not definitive. Full methodology.

Phase 1–2 gets you in the door. Phase 3 makes you productive. Phase 4 puts you on the track to senior compensation. You don't need to finish all 12 weeks before applying to jobs — but the further you go, the wider your options.

Salary figures are from U.S.-based listings in our database. International readers: the skill sequence still applies; the dollar amounts won't.


Phase 1: Python Fundamentals (Weeks 1–3)

No GIS yet. I know that's frustrating if you're eager to start mapping, but every GIS professional I've talked to who tried learning ArcPy before learning Python says the same thing: they wasted months. General Python skills transfer across every GIS platform. ArcPy skills don't.

Week 1: Core Syntax

Variables, data types, conditionals, loops. The bread and butter. If you've never written a line of code, this is where the discomfort lives — and where it ends. By Friday, you should be able to write a script that takes input, makes decisions, and repeats actions.

Your daily rhythm: Read a chapter of Automate the Boring Stuff (ATBS) in the morning (free online at automatetheboringstuff.com). Write the practice scripts in the afternoon. Don't just read — type the code, break it, fix it.

Cover: Chapters 1–4 of ATBS. Variables, flow control, functions, lists.

If you want a physical reference: Automate the Boring Stuff with Python, 3rd Ed. is the same content in book form — useful when the free version's formatting gets hard to navigate on mobile. But the content is identical; don't buy it unless you prefer print.

Week 2: Functions and Files

Functions, error handling, reading/writing files, working with modules. This is where Python stops feeling like a calculator and starts feeling like a tool. You're building reusable pieces now.

Cover: ATBS Chapters 5–8. String manipulation, pattern matching, file paths, organizing files.

Common mistake: Spending too long on string regex patterns. Skim Chapter 7 (regex). You'll rarely write complex regex in GIS work — but knowing it exists matters when you hit it in someone else's code.

Week 3: Data Structures and Pandas

Lists, dictionaries, and then Pandas — the library that sits under almost everything in Python data work. If you're going to interact with tabular data (and in GIS, you always are), Pandas is non-negotiable. Among Python-requiring GIS jobs in our Q1 2026 database, Pandas appears more often than ArcPy or GeoPandas — and many more jobs use it without listing it by name, since it's assumed.

Cover: ATBS Chapters 9–11 for files and data. Then pivot to the Pandas Getting Started tutorials — work through all 10. They're concise and excellent.

End-of-phase deliverable: Write a script that reads a CSV of data (anything — property records, weather stations, census data), filters rows by criteria, groups and summarizes with Pandas, and writes the result to a new file. No maps. No spatial data. Just: input → process → output. If you can do that, Phase 1 is done.

Switching from R? You already know data manipulation. Pandas is dplyr with different syntax — groupby() instead of group_by(), loc[] instead of filter(). The Pandas comparison with R page will save you a week.


Phase 2: Spatial Python Core (Weeks 4–6)

Now the GIS starts. You're going from "I can write Python" to "I can do spatial analysis in Python." This is the phase that produces your first portfolio project.

Week 4: GeoPandas — Your New Best Friend

GeoPandas is Pandas with a geometry column. If you survived Week 3, you already know 70% of how GeoPandas works. The new parts: reading shapefiles and GeoJSON, plotting geometries, and understanding coordinate reference systems.

What to learn:

  • Read spatial files (gpd.read_file())
  • Attribute queries and spatial plots
  • CRS handling (the source of 90% of beginner bugs — if your layers don't align, check the CRS first)
  • Exporting to different formats

Best free resource: University of Helsinki's Geo-Python and AutoGIS courses — Weeks 1–3 of AutoGIS cover exactly this. They're free, well-structured, and used in a real university course. This is not a "good for free" recommendation. These are genuinely excellent. For a broader spatial Python reference that covers both vector and raster in one book, Python for Geospatial Data Analysis by Dorman is solid — but the Helsinki courses are enough for this phase.

If you teach GIS: The Helsinki AutoGIS model — requiring a general Python prerequisite (Geo-Python) before touching spatial libraries — produces students who can generalize. Consider structuring your curriculum the same way. The AutoGIS materials are open-licensed and designed as university assignments.

Week 5: Spatial Operations

Spatial joins, buffers, overlays, intersections, dissolves. This is the analytical core — the GIS operations you'd do by clicking buttons in ArcGIS Pro, but now you're scripting them. Scripting means you can run the analysis on 500 counties instead of clicking through each one.

What to learn:

  • Spatial joins (point-in-polygon, nearest neighbor)
  • Buffer and overlay operations
  • Shapely geometry objects (the engine under GeoPandas)
  • Dissolve, clip, union

The CRS trap: Spatial operations require matching coordinate reference systems. gdf.to_crs(epsg=4326) will become muscle memory. If your spatial join returns zero results, the CRS is almost always the problem. Check it before asking for help online.

Week 6: Raster Data

Rasterio for raster I/O, GDAL for heavy lifting, zonal statistics for the analysis that ties rasters to vectors. Raster work is less intuitive than vector work — you're dealing with arrays of numbers, not shapes. But GDAL appears in 35 listings in our Q1 2026 data (more than any specific Python-GIS library), and raster skills correlate with remote sensing roles that pay well.

What to learn:

  • Read rasters with Rasterio (bands, nodata, affine transforms — the math that maps pixel coordinates to real-world locations)
  • Basic raster math (NDVI — vegetation index from satellite imagery, slope, aspect)
  • Zonal statistics (rasterstats library)
  • GDAL command-line basics (translate, warp, merge)

Free resource: Helsinki AutoGIS Week 6 covers Rasterio. For GDAL, the official cookbook is dense but thorough.

End-of-phase deliverable — Portfolio Project #1: Spatial analysis with visualization. The portfolio guide has a detailed walkthrough of a spatial equity analysis project using GeoPandas, Census data, and OpenStreetMap. Build that, or adapt the concept to a topic you care about. Either way: a GitHub repo, a clean README, a Jupyter notebook, and a 300–500 word write-up of what you found. This is what you'll put on your resume.

If you're hiring: A candidate who can show you this project — spatial analysis in GeoPandas with a clean GitHub repo and write-up — has already passed the bar that most "Python required" applicants miss. Ask them to walk through the CRS decisions. That tells you more than a technical interview ever will.

Phase 3: GIS Automation (Weeks 7–9)

Here's where you make a choice.

Phases 1–2: Shared Foundation (Python + Spatial Core)
Track A: Analyst Automation

Automate repetitive workflows, build custom tools, stop clicking the same 15 buttons every Monday.

Key skills: ArcPy / PyQGIS, SQL, batch processing
Employers: Government, environmental consultancies, utilities
Mid-level median: ~$103K
Track B: Geospatial Engineering

Build data pipelines, APIs, and systems that other people use. 54% of Python-requiring GIS jobs in our Q1 2026 data are here.

Key skills: Flask/Django, PostGIS, Docker, AWS
Employers: Defense, satellite companies, autonomous vehicles, tech
Senior median: $175K+

Both pay well. But the salary gap is real: Track A mid-level median is ~$103K. Track B senior median is $175K+. Not because Track A is less valuable — because Track B competes with software engineering salaries.

Pick the track that matches where you work or want to work. If you're unsure, start with Track A — the skills transfer, and you can pivot to Track B later.

Week 7: Your GIS Platform (Track A: ArcPy / PyQGIS | Track B: APIs and Web Frameworks)

Track A — ArcPy or PyQGIS:

If your employer has ArcGIS, learn ArcPy. If they don't (or you're freelance/nonprofit/academic), learn PyQGIS. Don't learn both. The concepts transfer; the APIs don't.

ArcPy: Start with Esri's free Learn Python in ArcGIS Pro path — it's surprisingly good for a vendor tutorial. Focus on the geoprocessing tool automation first. Ignore the GUI-building tools for now.

PyQGIS: Spatial Thoughts has free courses that cover QGIS Python scripting. Ujaval Gandhi's teaching style is clear and project-oriented.

For deeper ArcPy work: Python Scripting for ArcGIS Pro by Paul Zandbergen is the standard reference. It's the book Penn State uses in GEOG 485. Free alternative: Esri's training path above covers most of the same ground, just without the exercises.

Track B — Flask/Django and APIs:

As of Q1 2026, Django appears in 26 job listings in our database. Flask in 25. These are Python web frameworks, and they show up because geospatial engineering roles build web services that serve spatial data. This week, build a simple Flask API that accepts coordinates and returns nearby features from a spatial database.

Free resource: The Flask mega-tutorial is the gold standard for learning Flask.

Week 8: SQL for Spatial Data

In our Q1 2026 data, SQL co-occurs with Python in 27% of Python-requiring jobs. PostgreSQL in 16%. PostGIS in 11%. If you skip SQL, you're cutting yourself off from a third of the Python-GIS job market.

This week isn't about becoming a database administrator. It's about writing queries that answer spatial questions: "Show me all parcels within 500 meters of a bus stop" or "Which watersheds had more than 10 pollution events last year?"

What to learn:

  • SQL fundamentals (SELECT, WHERE, JOIN, GROUP BY)
  • PostGIS spatial functions (ST_Within, ST_Buffer, ST_Distance)
  • Connecting Python to PostgreSQL (psycopg2 or SQLAlchemy)
  • Spatial indexing (why your query is slow and how to fix it)

Free resource: PostGIS Introduction Tutorial — the official workshop. Install PostgreSQL + PostGIS locally and work through it.

Week 9: Automation and Version Control

The difference between a Python script and a Python workflow is automation. This week you tie it all together: batch processing, scheduling, error logging, and Git.

Track A: Build a tool that monitors a folder for new shapefiles, runs your Phase 2 analysis on each one automatically, and writes results to a summary table. Schedule it with cron (Mac/Linux) or Task Scheduler (Windows).

Track B: Build a data pipeline that pulls data from an API (weather, census, satellite), processes it through your spatial analysis, stores results in PostGIS, and logs everything. Push it to GitHub with a proper README.

Git is non-negotiable. It appears in 17% of Python-GIS listings in our Q1 2026 data. If you're not using Git by Week 9, start now. You don't need to understand rebasing or cherry-picking. You need: init, add, commit, push, pull, branch. That's it. GitHub's Git handbook covers this in 20 minutes.

End-of-phase deliverable — Portfolio Project #2: An automated GIS workflow. For Track A: a reusable ArcPy/PyQGIS tool with a clean interface. For Track B: a spatial data pipeline with a Git repo, documentation, and a diagram showing data flow. Both tracks: push it to GitHub.


Phase 4: Career-Track Specialization (Weeks 10–12)

This is where the salary curve bends. In our Q1 2026 database, Python + AWS has a median of $173K. Python + Machine Learning: $190K. Python + Docker: $170K. Small sample sizes (12–40 listings each), but directionally real and consistent with broader market data.

You don't need all three skills. Pick one specialization based on where you want to work.

Week 10: Web Mapping

From here on, both tracks converge — the specialization options in Weeks 11–12 apply regardless of which path you took.

Even if you're going deep on engineering, you need to know how to make spatial data visible on the web. Folium (Python → Leaflet.js) is the fastest path from "I have a GeoDataFrame" to "here's an interactive map you can share."

What to learn:

  • Folium for quick interactive maps from Python
  • Publishing to GitHub Pages (free hosting)
  • Basic Leaflet.js concepts (if you want to customize beyond Folium)

One afternoon with Folium and you'll never screenshot a static map again.

Week 11: Pick Your Lane

Option A — Cloud (AWS/GEE): If you're heading toward engineering or working with large datasets. Learn to store spatial data in S3, run processing with Lambda, or use Google Earth Engine's Python API for planetary-scale analysis.

Free resource: Google Earth Engine Python API docs — GEE is free for research and education.

Option B — Machine Learning: If you're heading toward data science or remote sensing. Classification, clustering, and prediction with spatial features. Scikit-learn does the heavy lifting.

Free resource: Scikit-learn's tutorials are among the best docs in the Python ecosystem.

Option C — Containerization and Deployment (Docker): If you're heading toward engineering. Package your spatial application so it runs anywhere. Docker appears in 20% of Python-GIS listings in our Q1 2026 data.

Free resource: Docker's Get Started guide — work through it with one of your Phase 3 projects.

Week 12: Portfolio Project #3 and Job Prep

This is the capstone. Build something that combines at least three skills from the curriculum and deploy it somewhere a hiring manager can see it.

Ideas:

  • A web dashboard that pulls live satellite data, runs a classification, and displays results on an interactive map (Weeks 4–6 + 10 + 11B)
  • An automated spatial ETL (extract-transform-load) pipeline deployed in a Docker container that updates a PostGIS database nightly (Weeks 8–9 + 11C)
  • A Flask API that serves the results of your Phase 2 spatial analysis, with documentation and a Folium front end (Weeks 7B + 8 + 10)

End-of-phase deliverable — Portfolio Project #3: Deployed, documented, and live. This is the project that opens interviews. The portfolio guide has detailed advice on presentation, write-ups, and what hiring managers actually look at.


The Two Things Most Learners Get Wrong

1. They collect resources instead of building projects. You don't need 15 bookmarks. You need three portfolio projects on GitHub. If you're on Week 6 and haven't pushed code to a repo yet, stop reading tutorials and start building.

2. They stop at ArcPy. ArcPy is useful — and it's the right tool for Track A. The mistake is treating it as the finish line instead of the starting point. Python + ArcGIS Pro alone has a $74K median in our Q1 2026 data. The curriculum keeps going after ArcPy because the market keeps going after ArcPy. The highest-paying Python-GIS roles pair Python with cloud platforms, databases, and machine learning — not with desktop GIS alone.


After Week 12

Twelve weeks gets you job-competitive. It doesn't make you senior. Community consensus — and the data — suggests "fair command" of Python for GIS takes 1.5–2 years of regular use. That's fine. The goal of this curriculum isn't mastery. It's three portfolio projects, a working knowledge of the tools employers actually hire for, and enough skill to learn the rest on the job.

What to do next:

  • Apply to jobs. Search Python-requiring GIS positions in our database.
  • Contribute to an open-source geospatial project (GeoPandas, Rasterio, and QGIS all welcome first-time contributors).
  • Tackle a personal project with real stakes — something you care about enough to fight through the bugs.
  • If you want structured learning beyond this, Penn State's GEOG 485 (ArcPy focus) and GEOG 489 (advanced Python) are the best academic options. The University of Helsinki's AutoGIS course is the best free option.

For Employers: Assessing Python Skills in GIS Candidates

A resume that says "Python" tells you nothing. Here's what to look for instead:

GitHub activity. Can the candidate push clean, documented code? Do their repos have READMEs? This matters more than years of experience. A candidate with two solid spatial Python projects on GitHub is more credible than one who lists "5 years Python experience" with nothing to show.

Ask them to walk through their code. Not a whiteboard algorithm puzzle. Show you a script they wrote, explain why they made the choices they did, and what they'd change. That tests judgment, not memorization.

Specify what "Python" means in your posting. Do you want ArcPy automation? Data engineering? Machine learning? "Python required" without context gets you applicants across a $75K–$190K salary range — and most of them won't match what you need. Use our Skills Explorer to see how other employers phrase their requirements.

For recruiters placing GIS talent: When a client says "Python required," ask whether they mean ArcPy automation or data engineering — the talent pool and salary expectations are completely different. A $75K ArcPy automation role and a $175K geospatial engineering role both list "Python." Clarify before you source.


For Educators: Curriculum Design Notes

Most GIS programs still teach tools over code — we've quantified the gap in our skills analysis. Python is the clearest example. Three actionable points:

Start with general Python, not ArcPy. Students who learn ArcPy first struggle to generalize. Students who learn Python fundamentals first pick up ArcPy, GeoPandas, and Rasterio with equal ease. The Helsinki AutoGIS model — Geo-Python prerequisite before spatial libraries — works.

Make portfolio projects the assignment, not reports. The portfolio projects in this curriculum (and in our portfolio guide) are designed as assignments. A GitHub repo with a clean README is worth more to a hiring manager than a 20-page term paper.

Teach Git. It's in 17% of Python-GIS listings (Q1 2026) and conspicuously absent from most GIS curricula. One lab session on Git fundamentals pays dividends for every assignment after.


Resources Referenced in This Curriculum

Free (the backbone):

Paid (if you want structured depth):

Every paid link above has a free alternative listed in the curriculum. You can complete all 12 weeks without spending a dollar.


Get the free GIS Career Roadmap

Subscribe for weekly GIS jobs + career insights, and get our career roadmap — 3 tracks from entry to senior with salary data.