One-time snapshot
NOAA Storm Events 1950–2024
Rebuilt storm-event snapshot with event-linked locations and fatalities, source provenance, and separate audit tables.
Records: 1,940,615 events; linked locations and fatalities
Coverage: Events: 1950–2024; locations: 1972, 1996–2024
Format: CSV + Parquet
Package uploaded: 2026-09-19
Listing reviewed: 2026-09-19
The upload and review dates do not extend the source coverage. This is a dated snapshot; future updates are not included.
$79one time
CSV and Parquet files for the coverage described here. Review the limitations and sample before purchasing.
Buy dated snapshotView 1,000-row sampleNew annual update subscriptions are unavailable. Existing customers can use their purchase download links or contact support.
Known limitations
- Join locations and fatalities to details by EVENT_ID, which is unique in the event table. Aggregate each child table separately before combining to avoid multiplying rows.
- Use derived EVENT_YEAR and EVENT_EPISODE_ID for parent-event analysis. Original YEAR, YEARMONTH and EPISODE_ID values are retained: 92,268 primary location rows disagree on source year and 2,298 on source episode ID. These source inconsistencies are explicitly flagged, not overwritten.
- The locations audit table retains 282,461 excluded rows: 20,817 linked to 2025 events outside this snapshot, 261,643 with missing coordinates, and one with invalid coordinates. Audit rows are not part of the primary location table; 2025 event details are not delivered.
- Primary location coverage is sparse: two rows link to 1972 events, with other rows in 1996–2024. Complete latitude/longitude pairs pass numeric bounds checks, which do not establish geographic accuracy. Detail-table endpoint coordinates remain as supplied, with missing, incomplete or invalid values flagged.
- TOR_LENGTH, BEGIN_RANGE, END_RANGE and TOR_WIDTH preserve source decimals. NOAA documents tornado width in whole yards, but 148 source values are fractional; these values are retained without assuming a corrected unit.
- Event types and reporting practices vary over the historical period. The archive is not a complete or uniform history of all weather hazards; long-term comparisons need source-specific qualification.
- Damage amounts are parsed nominal USD estimates, not inflation-adjusted losses. Derived damage, injury and death totals treat missing components as zero; a zero total does not prove no loss or harm.
- This is a dated 1950–2024 event snapshot rebuilt from pinned source revisions. Future updates are not included.
Files in this snapshot
Row counts are per table and should not be added as independent events. Expand a file to see its delivered Parquet field names and types.
noaa_storm_events_details.parquet — 1,940,615 rows · 63 fields
| Field | Type |
|---|---|
| BEGIN_YEARMONTH | string |
| BEGIN_DAY | string |
| BEGIN_TIME | string |
| END_YEARMONTH | string |
| END_DAY | string |
| END_TIME | string |
| EPISODE_ID | int64 |
| EVENT_ID | int64 |
| STATE | string |
| STATE_FIPS | int64 |
| YEAR | int64 |
| MONTH_NAME | string |
| EVENT_TYPE | string |
| CZ_TYPE | string |
| CZ_FIPS | int64 |
| CZ_NAME | string |
| WFO | string |
| BEGIN_DATE_TIME | string |
| CZ_TIMEZONE | string |
| END_DATE_TIME | string |
| INJURIES_DIRECT | int64 |
| INJURIES_INDIRECT | int64 |
| DEATHS_DIRECT | int64 |
| DEATHS_INDIRECT | int64 |
| DAMAGE_PROPERTY | string |
| DAMAGE_CROPS | string |
| SOURCE | string |
| MAGNITUDE | double |
| MAGNITUDE_TYPE | string |
| FLOOD_CAUSE | string |
| CATEGORY | string |
| TOR_F_SCALE | string |
| TOR_LENGTH | double |
| TOR_WIDTH | double |
| TOR_OTHER_WFO | string |
| TOR_OTHER_CZ_STATE | string |
| TOR_OTHER_CZ_FIPS | string |
| TOR_OTHER_CZ_NAME | string |
| BEGIN_RANGE | double |
| BEGIN_AZIMUTH | string |
| BEGIN_LOCATION | string |
| END_RANGE | double |
| END_AZIMUTH | string |
| END_LOCATION | string |
| BEGIN_LAT | double |
| BEGIN_LON | double |
| END_LAT | double |
| END_LON | double |
| EPISODE_NARRATIVE | string |
| EVENT_NARRATIVE | string |
| DATA_SOURCE | string |
| SOURCE_FILE | string |
| SOURCE_YEAR | int64 |
| SOURCE_ROW | int64 |
| DAMAGE_PROPERTY_USD | double |
| DAMAGE_CROPS_USD | double |
| TOTAL_DAMAGE_USD | double |
| BEGIN_DATE | string |
| END_DATE | string |
| INJURIES_TOTAL | int64 |
| DEATHS_TOTAL | int64 |
| BEGIN_COORDINATE_STATUS | string |
| END_COORDINATE_STATUS | string |
noaa_storm_events_locations.parquet — 1,465,798 rows · 21 fields
| Field | Type |
|---|---|
| YEARMONTH | string |
| EPISODE_ID | int64 |
| EVENT_ID | int64 |
| LOCATION_INDEX | int64 |
| RANGE | string |
| AZIMUTH | string |
| LOCATION | string |
| LATITUDE | string |
| LONGITUDE | string |
| LAT2 | double |
| LON2 | double |
| YEAR | string |
| SOURCE_FILE | string |
| SOURCE_YEAR | int64 |
| SOURCE_ROW | int64 |
| EVENT_YEAR | int64 |
| EVENT_EPISODE_ID | int64 |
| SOURCE_YEAR_MISMATCH | bool |
| SOURCE_EPISODE_MISMATCH | bool |
| SOURCE_YEARMONTH_MISMATCH | bool |
| COORDINATE_STATUS | string |
noaa_storm_events_fatalities.parquet — 23,766 rows · 17 fields
| Field | Type |
|---|---|
| FAT_YEARMONTH | string |
| FAT_DAY | string |
| FAT_TIME | string |
| FATALITY_ID | int64 |
| EVENT_ID | int64 |
| FATALITY_TYPE | string |
| FATALITY_DATE | string |
| FATALITY_AGE | int64 |
| FATALITY_SEX | string |
| FATALITY_LOCATION | string |
| YEAR | string |
| SOURCE_FILE | string |
| SOURCE_YEAR | int64 |
| SOURCE_ROW | int64 |
| EVENT_YEAR | int64 |
| EVENT_EPISODE_ID | int64 |
| SOURCE_YEAR_MISMATCH | bool |
noaa_storm_events_locations_audit.parquet — 282,461 rows · 22 fields
| Field | Type |
|---|---|
| YEARMONTH | string |
| EPISODE_ID | int64 |
| EVENT_ID | int64 |
| LOCATION_INDEX | int64 |
| RANGE | string |
| AZIMUTH | string |
| LOCATION | string |
| LATITUDE | string |
| LONGITUDE | string |
| LAT2 | double |
| LON2 | double |
| YEAR | string |
| SOURCE_FILE | string |
| SOURCE_YEAR | int64 |
| SOURCE_ROW | int64 |
| EVENT_YEAR | int64 |
| EVENT_EPISODE_ID | int64 |
| SOURCE_YEAR_MISMATCH | bool |
| SOURCE_EPISODE_MISMATCH | bool |
| SOURCE_YEARMONTH_MISMATCH | bool |
| COORDINATE_STATUS | string |
| EXCLUSION_REASON | string |
noaa_storm_events_fatalities_audit.parquet — 0 rows · 18 fields
| Field | Type |
|---|---|
| FAT_YEARMONTH | string |
| FAT_DAY | string |
| FAT_TIME | string |
| FATALITY_ID | int64 |
| EVENT_ID | int64 |
| FATALITY_TYPE | string |
| FATALITY_DATE | string |
| FATALITY_AGE | int64 |
| FATALITY_SEX | string |
| FATALITY_LOCATION | string |
| YEAR | string |
| SOURCE_FILE | string |
| SOURCE_YEAR | int64 |
| SOURCE_ROW | int64 |
| EVENT_YEAR | int64 |
| EVENT_EPISODE_ID | int64 |
| SOURCE_YEAR_MISMATCH | bool |
| EXCLUSION_REASON | string |
Inspect the public CSV
import pandas as pd
df = pd.read_csv(
"https://huggingface.co/datasets/claritystorm/noaa-storm-events/resolve/main/sample_1000.csv"
)
print(df.shape)
print(df.columns.tolist())
print(df.head())This CSV is a sample, not the full package. It does not establish complete historical coverage or represent every field’s missingness. License details are on the Hugging Face card.
Source: government source portal · Dataset changelog