NFL stadium weather: how roof and weather show up in the game data
Four of the 46 columns in the NFL games CSV describe the stadium at kickoff: roof (dome or outdoors), surface (grass or turf), temp (Fahrenheit), and wind (mph). They ride along with every game row, free in the 22-row sample CSV and in the full 7,548-row pack. This page runs a small analysis on the real sample to show what those columns change, and where they stop short.
What the weather columns record
The four condition columns sit between the odds columns and the quarterback columns in the schema:
roof,surface,temp,wind dome,astroturf,, ← Georgia Dome, MIN @ ATL outdoors,grass,80,12 ← Soldier Field, KC @ CHI
roofhas two values in the sample:domefor 6 games andoutdoorsfor 16. The full file also carries retractable-roof values, open and closed, from later seasons.tempandwindare blank for every dome game. With the roof closed there is no kickoff weather at the field, so the source file leaves the cells empty. Blank means missing, not zero.- Across the 16 outdoor rows, temp runs from 60 to 88 degrees and wind from 0 to 15 mph. That is an early-September window; the same columns in the full file dip far lower in December and January.
Roof and scoring in the sample
Group the sample by roof and average the total column, which is combined points:
roof count mean dome 6 38.0 outdoors 16 45.5
The 6 dome games averaged 38.0 combined points, the 16 outdoor games 45.5. Every dome game in the sample was played with no wind at the field and no weather delay possible; the outdoor games ranged from dead calm (0 mph, DAL @ WAS) to 15 mph (SEA @ CHI).
The honesty clause that belongs under every number this size: 6 rows is a handful, and both groups come from weeks 1 and 2 of the 1999 season, so this is a demonstration of why the roof column earns its place, not a finding about scoring. The same one-line groupby on the full 7,548-row file is where that question gets a real answer, across 27 seasons of games.
| Game | Stadium | Total |
|---|---|---|
| MIN @ ATL | Georgia Dome | 31 |
| BUF @ IND | RCA Dome | 45 |
| CAR @ NO | Louisiana Superdome | 29 |
| DET @ SEA | Seattle Kingdome | 48 |
| BAL @ STL | TWA Dome | 37 |
| GB @ DET | Pontiac Silverdome | 38 |
The hottest kickoffs and what those games scored
Filter out the dome rows with notna() and sort by temp:
away_team home_team temp wind total stadium NYG TB 88 8 30 Raymond James Stadium CIN TEN 84 10 71 Adelphia Coliseum KC CHI 80 12 37 Soldier Field
Two of the three hottest kickoffs landed at opposite ends of the scoring range: 88 degrees in Tampa produced 30 combined points, 84 degrees in Nashville produced 71. The coldest game in the sample, MIA @ DEN at 60 degrees, hit 59. Temperature alone explains very little, which is exactly why the file carries the columns side by side instead of collapsing conditions into one number. Comparing actual totals against the closing total_line column is one of the standard joins the file supports, and the column guide documents how that line is stored.
Wind in the sample
The windiest game, SEA @ CHI at 15 mph, scored 27 combined points, the second-lowest total in the sample. The calmest, DAL @ WAS at 0 mph, scored 76 and went to overtime. Between those bookends sits KC @ CHI: 80 degrees, 12 mph wind, 37 points. Wind direction is absent from the file, only speed, so gusts and crosswinds that matter to the play on the field are invisible here. That is a source-data limit, and the full pack carries the same limit because nflverse records what the box scores recorded.
Kicking: what the columns can and cannot say
Kicking is where roof and weather get cited most, and the CSV has no field-goal columns, so the honest framing is about inputs, not outcomes. A dome removes wind at the field entirely; the 6 dome rows in the sample are 27% of the file, and every kick in those games happened in still air. The 16 outdoor rows let you attach a measured wind speed and temperature to each game, which is what makes weather joins possible: analysts who study kicking accuracy pair the roof, temp, and wind columns from this file with play-by-play or kick logs from another source. The mechanism is ordinary physics, wind moves the ball and cold stiffens it, but the sample cannot quantify the effect, and neither can any single 22-row slice. The pack's role is to supply the condition columns for all 7,548 games so the join runs once instead of 27 seasons' worth of times.
From the 22-row slice to the full 7,548-row file
The sample is the first 22 rows of games.csv, weeks 1 and 2 of the 1999 season, 46 columns. Nothing about the weather columns changes in the full pack: same names, same units, same blank-for-dome convention, now covering 1999 through 2026 (results through the 2025 season, plus 272 scheduled 2026 rows). What grows is the range of conditions, from early-September heat like this sample to the December and January outdoor games where temp drops below freezing and wind becomes the story of the game. The pack also includes team-records-by-season.csv (861 rows) and season-summaries.csv (27 rows), a data dictionary, and SHA-256 checksums. Prefer working in a notebook? The pandas quickstart loads this exact URL in two lines. Want the same file in a spreadsheet? The Excel and Google Sheets guide walks the import, and the free sports data sources review covers where else this kind of weather data legally comes from. Prefer the league split over the franchise split? The conference guide maps each abbreviation to AFC or NFC and runs the head-to-head on this same 22-row sample.
Checkout and download run through Getly. The full pack is 3 CSVs (7,548 + 861 + 27 rows), data dictionary, source SHA-256 checksums. The sample and season-summaries download free here, no signup.
NFL stadium weather data questions
- Does the NFL games CSV include stadium weather data?
- Yes. Four of the 46 columns describe conditions at kickoff:
roof(dome or outdoors),surface(grass or turf),tempin Fahrenheit, andwindin mph. They sit next to the score columns in every row of the free 22-row sample and the full 7,548-row pack, 1999 through 2026. The one rule to expect: dome games have blank temp and wind cells, because with the roof closed the number was never recorded. - Why are temp and wind blank for dome games?
- Blank means missing, not zero. In a closed dome there is no outdoor temperature or wind at the field, so the source file leaves the cells empty. In pandas those blanks load as NaN, which is the correct reading: 0 mph wind and 0 degrees would both be false statements about the game. Filter with
notna()before any temp or wind math so the dome rows stay out of the averages. - What can the 22-row weather sample show that the full 7,548-row pack cannot?
- Nothing. The sample is a slice of the full file, weeks 1 and 2 of the 1999 season, with the same 46 columns. Its roof split, 6 dome games averaging 38.0 combined points against 45.5 for 16 outdoor games, is small enough that it works as a pandas exercise rather than a finding. The full pack covers 27 seasons, including the December and January outdoor games where weather differences get big enough to study properly.
Source and license
All game rows come from the nflverse-data project, file schedules/games.csv, downloaded 2026-09-06 with the SHA-256 recorded in the pack. nflverse-data is released under CC BY 4.0; credit it as "Data from nflverse, CC BY 4.0". Samples on this site carry the same license. No logos or league marks appear anywhere in the pack; team and stadium names are factual data. This page and the pack describe data only and offer no betting advice, picks, or predictions.