Avocado Prices Analysis – Real-World Data Manipulation with Pandas 2026
The famous Avocado dataset is an excellent example for practicing real-world data manipulation. It contains weekly avocado prices and volumes across different regions and types (conventional vs organic) in the US from 2015 to 2026. In this article, we’ll explore practical Pandas techniques using this dataset.
1. Loading and Initial Exploration
import pandas as pd
# Create a small demo version of the avocado dataset so this example runs as-is
# (the real file comes from the public Kaggle "Avocado Prices" dataset)
import numpy as np
rng = np.random.default_rng(7)
dates = pd.date_range("2025-01-05", periods=52, freq="W")
rows = [(d, t, r) for d in dates for t in ("conventional", "organic") for r in ("Albany", "Boston", "Chicago")]
pd.DataFrame(rows, columns=["Date", "type", "region"]).assign(
AveragePrice=lambda d: np.where(d["type"] == "organic", 1.6, 1.1) + rng.normal(0, 0.1, len(d)).round(2),
**{"Total Volume": rng.integers(5_000, 90_000, len(rows))},
).to_csv("avocado.csv", index=False)
# Load the avocado dataset
df = pd.read_csv("avocado.csv", parse_dates=["Date"])
print(df.shape)
print(df.info())
# Quick overview
print(df.head())
# Basic statistics
print(df.describe())
2. Common Data Manipulation Tasks
# Average price by type (organic vs conventional)
avg_price_by_type = df.groupby("type")["AveragePrice"].mean()
print(avg_price_by_type)
# Average price by region
avg_price_by_region = df.groupby("region")["AveragePrice"].mean().sort_values(ascending=False)
print(avg_price_by_region.head(10))
# Total volume by year
df["Year"] = df["Date"].dt.year
yearly_volume = df.groupby("Year")["Total Volume"].sum()
print(yearly_volume)
3. Advanced Analysis with Pivot Tables
# Average price by region and type
pivot = pd.pivot_table(
df,
values="AveragePrice",
index="region",
columns="type",
aggfunc="mean"
).round(2)
print(pivot.head(10))
# Monthly average price trend for conventional avocados
monthly = df[df["type"] == "conventional"].resample("ME", on="Date")["AveragePrice"].mean()
print(monthly.head())
4. Visualization Examples
import matplotlib.pyplot as plt
import seaborn as sns
# Price distribution by type
plt.figure(figsize=(10, 6))
sns.boxplot(data=df, x="type", y="AveragePrice")
plt.title("Avocado Price Distribution by Type")
plt.show()
# Average price trend over time
plt.figure(figsize=(12, 6))
sns.lineplot(data=df, x="Date", y="AveragePrice", hue="type")
plt.title("Avocado Average Price Trend (Conventional vs Organic)")
plt.show()
Best Practices Demonstrated
- Using
parse_dateswhen loading date columns - Creating new columns from datetime (
.dt.year) - Using
groupby()with meaningful aggregations - Creating pivot tables for cross-comparisons
- Using Seaborn for insightful visualizations
Turning a Dataset into Answers
Real-world analysis starts with a question, such as how prices differ by type or region. Load the data, check types and missing values, convert dates, and then group, aggregate and plot to answer that question.
Keep every step in code so it can be repeated on new data. Small checks after each step, like df.shape or df.isna().sum(), catch problems before they reach a chart.
Worked Example: Average Price by Type and Year
A small avocado-style table is cleaned and summarised by type and year.
import pandas as pd
df = pd.DataFrame({
"date": ["2025-03-01", "2025-09-01", "2026-03-01", "2026-09-01"] * 2,
"type": ["conventional"] * 4 + ["organic"] * 4,
"average_price": [1.10, 1.25, 1.18, 1.30, 1.60, 1.72, 1.65, None],
})
df["date"] = pd.to_datetime(df["date"])
print(df.isna().sum())
clean = df.dropna(subset=["average_price"])
summary = clean.groupby(["type", clean["date"].dt.year])["average_price"].mean().unstack()
print(summary.round(3))
One organic price is missing, so it is dropped before averaging. The unstacked table puts years in columns, which makes year-on-year comparison and plotting straightforward.
Practical Tips
When working with a real dataset, keep a short notebook log of every decision: which rows were dropped, which units were used and which filters were applied. Before trusting a conclusion, check the group sizes behind every average, because a few observations can produce misleading differences. Finally, turn the summary table into a simple chart so readers can see the answer to the original question at a glance.
Common Mistakes
- Analysing before checking types and missing values.
- Averaging prices across different units or volumes.
- Leaving dates as strings and grouping by text.
- Drawing conclusions from very small groups.
Quick Summary
- Start with a clear question.
- Check shape, types and missing values first.
- Group and aggregate to answer the question.
- Keep every step in reproducible code.
Conclusion
The Avocado dataset is perfect for practicing real-world data manipulation skills. Through grouping, pivoting, time-based analysis, and visualization, you can extract valuable insights such as price differences between organic and conventional avocados, regional variations, and seasonal trends.
Next steps:
- Download the avocado dataset and try to answer these questions:
- Which region has the highest average avocado price?
- How has the price gap between organic and conventional avocados changed over time?
- When is the peak season for avocado sales?