Intermediate13 columnsUp to 10,000 rows Fictional data

Food Delivery Orders dataset

Orders with distance, weather, traffic, prep and delivery times, and the customer's rating.

Made the moment you click and sent straight to you. Nothing is saved on our server.

About this dataset

Orders from a fictional food delivery app across eight cities: when the order was placed, what cuisine, how many items, order value, delivery distance, weather and traffic, how long the kitchen took, how long delivery took in total, and the rating the customer gave.

Delivery time is a great regression target because the reasons are easy to picture: further, rainier and busier means slower. Ratings then fall as deliveries run late, so you can connect operations to customer happiness.

Good for practising: Regression, Feature analysis, Hourly patterns, Visualisation.

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:

  • Orders peak at lunch (12–2 pm) and dinner (7–10 pm), with very few late at night.
  • Delivery time grows with distance, and rain and heavy traffic make every kilometre slower.
  • It rains on many more orders from June to September.
  • Prep time grows with the number of items.
  • Ratings drop once total delivery time goes past roughly 35 minutes.

Columns

ColumnTypeDescription
order_idID (text)Order number.
order_timeDate & timeWhen the order was placed.
cityCategoryCity.
cuisineCategoryType of food.
itemsWhole numberNumber of items in the order.
order_valueAmount (₹)Bill amount in rupees.
distance_kmDecimalRestaurant to customer, km.
weatherCategoryClear, Cloudy or Rainy.
trafficCategoryLow, Medium or High.
prep_time_minWhole numberKitchen preparation time, minutes.
delivery_time_minWhole numberOrder to doorstep, minutes.
delivery_ratingWhole numberCustomer rating, 1 to 5.
payment_modeCategoryUPI, Card, Cash on delivery or Wallet.

Preview: the first 8 rows

A sample with seed 2026. Your download will have different values but the same columns and patterns.

order_idorder_timecitycuisineitemsorder_valuedistance_kmweathertrafficprep_time_mindelivery_time_mindelivery_ratingpayment_mode
FD00000012024-06-14 20:43PuneStreet Food3623.923.6RainyHigh18465UPI
FD00000022024-06-26 20:07AhmedabadStreet Food2337.022.8ClearLow13215Cash on delivery
FD00000032024-09-10 18:43KolkataPizza31487.437.6ClearMedium24563UPI
FD00000042025-04-02 18:52KolkataBiryani3883.495.6CloudyHigh14474Wallet
FD00000052025-04-09 20:28ChennaiHealthy Bowls3900.261.7RainyLow27345Cash on delivery
FD00000062025-05-12 19:16AhmedabadPizza31420.996.7ClearHigh11494UPI
FD00000072025-06-13 12:13MumbaiPizza21184.23.4RainyMedium23474UPI
FD00000082025-12-19 20:52ChennaiHealthy Bowls2766.061.0ClearHigh20293UPI

Practice exercises

  1. Plot orders by hour of day, and average delivery time by hour. When are customers waiting longest?
  2. Fit a linear regression for delivery time on distance, rain, traffic and items. Interpret each coefficient.
  3. Compare average rating for deliveries under 30 minutes, 30–45 minutes and over 45 minutes.
  4. Which city and cuisine combination has the highest average order value?
  5. Build a 'late order' flag (over 45 minutes) and find which conditions make it most likely.

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/food-delivery/download/?rows=1000&seed=42"
df = pd.read_csv(url, parse_dates=["order_time"])
df.head()

For SQL practice, download the SQL format and run it against an empty database, for example sqlite3 practice.db < food-delivery-1000-rows-seed42.sql or mysql -u root -p practice < food-delivery-1000-rows-seed42.sql (use your file's name). It creates a table called food_delivery 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

See all 14 datasets →