How to Find the Countries With the Most Erupting Volcanoes
On this page
Problem statement
Which country has the most volcanoes depends on what you count: volcanoes on the Holocene list, volcanoes that have erupted in living memory, or eruptions themselves. The Smithsonian's volcano table answers all three, with one complication: volcanoes on a border are listed under a combined name such as "Chile-Argentina", and some islands under an administering country with a claim noted, such as "Japan - administered by Russia". Grouping by the raw column puts those in countries of their own. This page splits the shared volcanoes, counts by country three ways, and finds the volcanoes that erupt most often.
Quick answer
Split the country column on the hyphen, give each country a shared volcano, and count volcanoes with a confirmed eruption since 1960:
c = eru[eru.Activity_Type == "Confirmed Eruption"]
recent = c[c.StartDateYear >= 1960].Volcano_Number.unique()
ctry = vol[["Volcano_Number", "Country"]].assign(country=vol.Country.str.split(r"\s*-\s*(?:administered by|claimed by)?\s*")).explode("country")
ctry = ctry[ctry.country.str.len() > 0]
print(ctry[ctry.Volcano_Number.isin(recent)].country.value_counts().head(8).to_string())
print(f"volcanoes with a confirmed eruption since 1960: {len(recent)}")
country
Indonesia 54
Japan 40
United States 39
Russia 27
Chile 19
Papua New Guinea 13
Ecuador 12
Iceland 10
volcanoes with a confirmed eruption since 1960: 329
Indonesia has the most volcanoes that have erupted since 1960, 54, then Japan with 40 and the United States with 39, almost all of those in Alaska, Hawaii and the Cascades. In total 329 volcanoes have had a confirmed eruption since 1960. A shared volcano counts once for each country it belongs to.
Three counts by country
1. Shared volcanoes
shared = vol[vol.Country.str.contains("-")]
print(shared.Country.value_counts().head(6).to_string())
print(f"volcanoes listed under more than one country: {len(shared)}")
Country
Chile-Argentina 18
Japan - administered by Russia 11
Chile-Bolivia 6
Armenia-Azerbaijan 2
Ethiopia-Eritrea 2
France - claimed by Vanuatu 2
volcanoes listed under more than one country: 50
50 volcanoes are listed under more than one country, 18 of them on the Chile-Argentina border high in the Andes. The Kuril Islands appear as "Japan - administered by Russia", and Matthew and Hunter islands as "France - claimed by Vanuatu". The split assigns these to both names, which suits a count of volcanoes a country has to watch. For a count of territory, use the administering country only. Two other values are not countries in the usual sense. "Undersea Features" holds 16 volcanoes on mid-ocean ridges in international waters, such as Axial Seamount. "United Kingdom" holds 14 in its overseas territories, from the South Sandwich Islands to Montserrat's Soufrière Hills. Both appear in a ranking unless you leave them out.
2. Volcanoes, recent volcanoes, eruptions
eru_c = c[c.StartDateYear >= 1960].merge(ctry[["Volcano_Number", "country"]], on="Volcano_Number")
t = pd.DataFrame({"holocene_volcanoes": ctry.country.value_counts(),
"erupted_since_1960": ctry[ctry.Volcano_Number.isin(recent)].country.value_counts(),
"eruptions_since_1960": eru_c.country.value_counts()}).fillna(0).astype(int)
print(t.sort_values("erupted_since_1960", ascending=False).head(8).to_string())
holocene_volcanoes erupted_since_1960 eruptions_since_1960
country
Indonesia 101 54 406
Japan 116 40 230
United States 165 39 227
Russia 106 27 224
Chile 90 19 110
Papua New Guinea 39 13 107
Ecuador 36 12 66
Iceland 35 10 28
The three counts rank countries differently. The United States has the most Holocene volcanoes, 165, but Indonesia has the most that have erupted recently and by far the most eruptions since 1960, 406, because volcanoes such as Karangetang erupt again and again. Iceland's 35 volcanoes produced 28 eruptions in that time.
3. The rankings disagree
print(t.rank(ascending=False, method="min").astype(int).loc[["United States", "Indonesia", "Japan", "Russia", "Chile", "Iceland"]].to_string())
holocene_volcanoes erupted_since_1960 eruptions_since_1960
country
United States 1 3 3
Indonesia 4 1 1
Japan 2 2 2
Russia 3 4 4
Chile 5 5 5
Iceland 9 8 15
The United States is first by Holocene volcanoes and third by recent ones. Indonesia is fourth by volcanoes and first by everything else, and Iceland falls from eighth to fifteenth when eruptions are counted. Say which count a ranking uses.
The busiest volcanoes
The data used on this page
The Smithsonian Institution Global Volcanism Program's Volcanoes of the World database (version 5.3 is cited as doi:10.5479/si.GVP.VOTW5-2025.5.3): its Holocene volcano and eruption tables, read from the program's WFS service on 19 October 2026 and saved on this site, because the database is edited as eruptions are reported.
from pathlib import Path
import zipfile
import geopandas as gpd
import numpy as np
import pandas as pd
import requests
Path("data").mkdir(exist_ok=True)
# Smithsonian Global Volcanism Program, Volcanoes of the World: Holocene volcanoes, Holocene eruptions and Pleistocene
# volcanoes as GeoJSON from its WFS service, with Natural Earth's populated places and 1:110m countries.
# Saved 19 October 2026, because the database is edited as eruptions are reported.
# Live: https://webservices.volcano.si.edu/geoserver/GVP-VOTW/ows?service=WFS&version=2.0.0&request=GetFeature
# &outputFormat=json&typeName=GVP-VOTW:Smithsonian_VOTW_Holocene_Volcanoes (and ..._Holocene_Eruptions)
ARCHIVE = "gvp-votw-2026-10-19.zip"
if not Path(f"data/{ARCHIVE}").exists():
Path(f"data/{ARCHIVE}").write_bytes(requests.get(f"https://data.spatialworkflow.io/{ARCHIVE}", timeout=600).content)
Z = zipfile.ZipFile(f"data/{ARCHIVE}")
vol = gpd.read_file(Z.open("Smithsonian_VOTW_Holocene_Volcanoes.json"))
eru = gpd.read_file(Z.open("Smithsonian_VOTW_Holocene_Eruptions.json"))
print(f"Volcanoes of the World: {len(vol):,} Holocene volcanoes, {len(eru):,} eruptions")
Volcanoes of the World: 1,214 Holocene volcanoes, 11,089 eruptions
Example 1: most eruptions since 1960
busy = c[c.StartDateYear >= 1960].groupby(["Volcano_Name"]).size().nlargest(8)
print(busy.to_string())
Volcano_Name
Fournaise, Piton de la 55
Bezymianny 50
Klyuchevskoy 44
Ulawun 38
Poas 35
Ruapehu 35
Karangetang 32
San Cristobal 31
The busiest volcano since 1960 is Piton de la Fournaise on RΓ©union, with 55 eruptions, then Bezymianny and Klyuchevskoy in Kamchatka with 50 and 44. Volcanoes with frequent short eruptions dominate this list. Stromboli, erupting continuously since 1934, counts as a single eruption.
Example 2: erupting in 2025 and 2026
now = eru[(eru.Activity_Type == "Confirmed Eruption") & ((eru.StartDateYear >= 2025) | (eru.EndDateYear >= 2025))]
print(f"volcanoes with eruptive activity in 2025 or 2026: {now.Volcano_Number.nunique()}")
print(now.merge(ctry, on="Volcano_Number").country.value_counts().head(5).to_string())
volcanoes with eruptive activity in 2025 or 2026: 66
country
Indonesia 12
Japan 7
Russia 5
United States 5
Papua New Guinea 4
66 volcanoes had eruptive activity in 2025 or 2026, counting both eruptions that started then and older ones still going: 12 in Indonesia, 7 in Japan and 5 each in Russia and the United States.
Internal links
- Reading the database β the volcano and eruption tables
- How long eruptions last β the long-running eruptions behind Example 2
- What the records hold β what "active" can mean
- Cities near volcanoes β the places beside them