Skip to content

IMD β€” India Meteorological Department

India's official source for weather, climate, and rainfall data β€” going back to 1901 for gridded rainfall.


Provider
India Meteorological Department (IMD)
Access Level
🟑 Registration for gridded data; some free
Formats Available
NetCDF (.nc), ASCII grid, CSV, PDF reports
Coverage
All India β€” 0.25Β° grid (~28km Γ— 28km cells)
Time Period
Rainfall: 1901–2023 | Temperature: 1969–present

What IMD Provides

Dataset Resolution Period Format Access
Gridded Daily Rainfall 0.25Β° 1901–2023 NetCDF 🟑 Registration
Gridded Monthly Rainfall 0.25Β° 1901–2023 NetCDF 🟑 Registration
District Monthly Rainfall District 1901–2023 CSV 🟑 Registration
Weather Station Data Point 1960–present CSV 🟑 Registration
Cyclone Best Track Point/Line 1890–present CSV/Shapefile 🟒 Free
Drought Atlas District 1870–present PDF 🟒 Free
Seasonal Forecasts State Seasonal PDF 🟒 Free

How to Access IMD Data

Method 1: IMD Open Data Portal 🟑

  1. Go to mausam.imd.gov.in
  2. Navigate to "Climate Data" β†’ "Data Online"
  3. Register with your name, institution, and purpose
  4. After login: search for your dataset β†’ Add to cart β†’ Download

Available at mausam.imd.gov.in: - Daily/monthly gridded rainfall (NetCDF) - Station-level observational data (CSV) - Extreme events database


Method 2: CHIRPS Rainfall (No Login β€” Alternative) 🟒

If IMD registration is slow, CHIRPS (Climate Hazards Group InfraRed Precipitation with Station data) provides high-quality alternative rainfall data for India:

  • Resolution: 0.05Β° (~5.5 km) β€” much finer than IMD gridded
  • Period: 1981–present
  • Access: Free, no login
  • Source: chc.ucsb.edu/data/chirps

Or access via Google Earth Engine (free):

// GEE JavaScript β€” CHIRPS Monthly Rainfall for India
var chirps = ee.ImageCollection("UCSB-CHG/CHIRPS/PENTAD")
  .filterDate('2023-06-01', '2023-09-30')  // Monsoon 2023
  .filterBounds(ee.Geometry.Rectangle([68, 8, 97, 37]));  // India bbox

var totalRain = chirps.sum();  // Total Jun-Sep rainfall

Map.centerObject(ee.Geometry.Point([78, 22]), 5);
Map.addLayer(totalRain, {min: 0, max: 2000, palette: ['white','blue','darkblue']},
             'Monsoon Rainfall 2023 (mm)');


Method 3: District Monthly Rainfall CSV 🟑

For district-level analysis without handling NetCDF:

  1. Register at mausam.imd.gov.in
  2. Download "District-wise Monthly Rainfall" CSV
  3. Each row: State, District, Year, Month, Rainfall (mm)

Python: Analyse Monsoon Rainfall from NetCDF

import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# Load IMD gridded rainfall NetCDF (annual files)
# Download from mausam.imd.gov.in after registration
ds = xr.open_dataset("RF25_IND_1901_2023.nc")

# Variable name is typically 'RAINFALL' or 'rf'
print(ds)  # Check variable names

# Select June-September (monsoon season) for 2023
rain_2023 = ds.sel(TIME=slice('2023-06-01', '2023-09-30'))
monsoon_2023 = rain_2023['RAINFALL'].sum(dim='TIME')  # Total monsoon rainfall

# Seasonal anomaly: compare to 1981-2010 baseline
baseline = ds.sel(TIME=slice('1981-01-01', '2010-12-31'))
baseline_jjas = baseline['RAINFALL'].where(
    baseline['TIME.month'].isin([6,7,8,9])
).groupby('TIME.year').sum('TIME').mean('year')

anomaly_2023 = monsoon_2023 - baseline_jjas

# Plot anomaly map
fig, ax = plt.subplots(1, 1, figsize=(10, 8),
                        subplot_kw={'projection': ccrs.PlateCarree()})
anomaly_2023.plot(ax=ax, transform=ccrs.PlateCarree(),
                   cmap='RdBu', center=0,
                   cbar_kwargs={'label': 'Rainfall Anomaly (mm)'})
ax.coastlines()
ax.set_title('Monsoon 2023 Rainfall Anomaly vs 1981-2010 Baseline')
plt.savefig('monsoon_anomaly_2023.png', dpi=150, bbox_inches='tight')
plt.show()

✏️ Practice Exercise

Exercise 3.1 β€” Monsoon Trend in Your State

Goal: Find average monsoon rainfall for your state and see if it has changed.

Using IMD district data (CSV):

  1. Download District Monthly Rainfall CSV from mausam.imd.gov.in
  2. Open in Python or Excel
  3. Filter for your state β†’ Sum June to September for each year
  4. Plot a line chart: Year (x-axis) vs Total Monsoon Rainfall (y-axis)
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("district_monthly_rainfall.csv")
# Filter your state
state_df = df[df['STATE'] == 'MAHARASHTRA']
# Monsoon months: June=6, July=7, August=8, September=9
monsoon = state_df[state_df['MONTH'].isin([6, 7, 8, 9])]
# Annual monsoon total (average across all districts)
annual = monsoon.groupby('YEAR')['RAINFALL'].mean()
annual.plot(figsize=(12,5), title="Average Monsoon Rainfall β€” Maharashtra")
plt.ylabel('Rainfall (mm)')
plt.grid(True, alpha=0.3)
plt.savefig('maharashtra_monsoon_trend.png')

Questions: - [ ] Has average monsoon rainfall increased or decreased over 50 years? - [ ] Were there any notable drought years? (significantly below average) - [ ] Which decade had the most reliable monsoon (least variation)?


Next Dataset: Land Use Land Cover β†’