Daily City Weather dataset
Simulated daily temperature, rain, humidity and AQI for Indian cities, with monsoon and winter smog seasons.
About this dataset
Simulated daily weather for up to eight Indian cities from April 2024 to March 2026: minimum and maximum temperature, humidity, rainfall, wind speed, air quality index (AQI) and a one-word condition.
The numbers are generated, not measured, so do not use them for real decisions. They are built to behave like Indian weather, though: hot summers in the north, a mild Bengaluru, monsoon months in the right places and smog in Delhi's winter. That makes the file well suited to practising date handling, resampling and charts.
Good for practising: Time series, Matplotlib, Seasonality, Resampling.
What's built into the data
The rows are random, but they follow rules, so there is something real to find. These are the patterns to look for:
- Delhi and Jaipur swing from cold winters to very hot May–June peaks; Mumbai, Kochi and Bengaluru stay much steadier.
- Most rain falls in each city's monsoon months: June to September in most places, October to December in Chennai.
- Rainy days are cooler and more humid, and they bring the AQI down.
- AQI rises sharply from November to January, most of all in Delhi.
Columns
| Column | Type | Description |
|---|---|---|
date | Date | Day of the reading. |
city | Category | City. |
condition | Category | Clear, Partly cloudy, Cloudy, Haze, Light rain, Rain or Heavy rain. |
min_temp_c | Decimal | Minimum temperature, °C. |
max_temp_c | Decimal | Maximum temperature, °C. |
humidity_pct | Whole number | Relative humidity, percent. |
rainfall_mm | Decimal | Rain in millimetres. |
wind_kmph | Decimal | Average wind speed, km/h. |
aqi | Whole number | Air quality index (higher is worse). |
Preview: the first 8 rows
A sample with seed 2026. Your download will have different values but the same columns and patterns.
| date | city | condition | min_temp_c | max_temp_c | humidity_pct | rainfall_mm | wind_kmph | aqi |
|---|---|---|---|---|---|---|---|---|
| 2024-04-01 | Delhi | Clear | 24.2 | 35.2 | 35 | 0.0 | 6.9 | 131 |
| 2024-04-01 | Mumbai | Partly cloudy | 27.2 | 31.9 | 69 | 0.0 | 3.7 | 94 |
| 2024-04-01 | Chennai | Partly cloudy | 29.1 | 35.7 | 73 | 0.0 | 9.0 | 50 |
| 2024-04-02 | Delhi | Cloudy | 24.1 | 35.1 | 53 | 0.0 | 8.1 | 180 |
| 2024-04-02 | Mumbai | Clear | 26.5 | 34.1 | 67 | 0.0 | 17.6 | 82 |
| 2024-04-02 | Chennai | Clear | 25.4 | 34.7 | 72 | 0.0 | 16.0 | 57 |
| 2024-04-03 | Delhi | Partly cloudy | 25.4 | 36.4 | 21 | 0.0 | 2 | 138 |
| 2024-04-03 | Mumbai | Clear | 29.2 | 33.2 | 80 | 0.0 | 12.8 | 60 |
Practice exercises
- Resample to monthly averages and draw one line per city for max temperature.
- Total the rainfall per city per month. Does each city's wettest month match its monsoon?
- Count 'poor air' days (AQI above 200) per city per month and show them as a heatmap.
- Compare average AQI on rainy and dry days with a box plot.
- Find the longest run of consecutive dry days in each city.
Stuck on one? Each exercise uses ideas from the lessons below, and trying it with the messy option on turns it into a cleaning exercise as well.
Load it straight into Python
You don't have to download first. Pandas can read the link directly, in Jupyter, Google Colab or a script. Keep the seed so you get the same data every time you run the notebook:
import pandas as pd
url = "https://beeprotonai.info/resources/datasets/city-weather/download/?rows=1000&seed=42"
df = pd.read_csv(url, parse_dates=["date"])
df.head()
For SQL practice, download the SQL format and run it against an empty database, for example sqlite3 practice.db < city-weather-1000-rows-seed42.sql or mysql -u root -p practice < city-weather-1000-rows-seed42.sql (use your file's name). It creates a table called city_weather and fills it.
About the data
Everything in this file is invented. Names are random pairings of common first names and surnames, email addresses use example.com (reserved for examples, so it can never reach anyone), and phone numbers start with +91 00, which no real Indian mobile number does. Any resemblance to a real person or business is coincidence. Dates run from 1 April 2024 to 31 March 2026 unless a column says otherwise. Use it freely for learning, teaching and projects, including commercial ones, with no attribution required (CC0).
Lessons that go with it
More datasets
Two years of orders from a fictional chain of Indian sweet shops, with Diwali …
Employee & Attrition RecordsAn HR file of employees with salary, satisfaction, overtime and whether they left: built …
Student Exam ResultsMarks in five subjects with attendance and study hours, plus totals, percentage, result and …
Customer List (CRM)Customer records with contact details, segment, orders and spend: ideal for cleaning, deduplication and …
Stock Register (Inventory)Monthly stock register for five warehouses: opening, received, issued, closing, reorder level and value.
Website Traffic (Analytics)Daily sessions, users, bounce rate and conversions by page, traffic source and device.