Skip to content

03-01: Exercises — Pandas Basics

Notes reference: 03-01: Pandas — Basics and Data Structures


Q1: Create a Series

Create a pd.Series of monthly sales (BDT) with month names as the index.

Solution

import pandas as pd

sales = pd.Series(
    [120000, 95000, 140000, 110000, 160000, 135000],
    index=["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
)

print(sales)
print(f"\nMean: {sales.mean():,.0f} BDT")
print(f"Max:  {sales.max():,.0f} BDT ({sales.idxmax()})")
print(f"Min:  {sales.min():,.0f} BDT ({sales.idxmin()})")


Q2: Series — boolean indexing

From the sales series above, find months where sales exceeded 125,000 BDT.

Solution

import pandas as pd

sales = pd.Series(
    [120000, 95000, 140000, 110000, 160000, 135000],
    index=["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
)

high = sales[sales > 125_000]
print(high)


Q3: Create a DataFrame

Build a DataFrame of 5 employees with columns: name, city, department, salary.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":       ["Rahim", "Sara", "James", "Nadia", "Michael"],
    "city":       ["Dhaka", "New York", "Berlin", "Tokyo", "Nairobi"],
    "department": ["Engineering", "Marketing", "Engineering", "HR", "Marketing"],
    "salary":     [85000, 72000, 90000, 68000, 75000],
})

print(df)
print(f"\nShape: {df.shape}")
print(f"Columns: {list(df.columns)}")
print(df.dtypes)


Q4: Access columns and rows

Access a single column, multiple columns, a row by index, and a row by label.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":   ["Rahim", "Sara", "James"],
    "city":   ["Dhaka", "New York", "Berlin"],
    "salary": [85000, 72000, 90000],
})

print(df["name"])                  # single column as Series
print(df[["name", "salary"]])      # multiple columns as DataFrame
print(df.iloc[1])                  # row by position (Sara)
print(df.iloc[0:2])                # first two rows
print(df.loc[1, "city"])           # cell: row 1, column 'city'


Q5: head(), tail(), info(), describe()

Explore a DataFrame with built-in inspection methods.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":       ["Rahim", "Sara", "James", "Nadia", "Michael", "Amina"],
    "department": ["Engineering", "Marketing", "Engineering", "HR", "Marketing", "Engineering"],
    "salary":     [85000, 72000, 90000, 68000, 75000, 92000],
    "years":      [3, 5, 7, 2, 4, 6],
})

print(df.head(3))       # first 3 rows
print(df.tail(2))       # last 2 rows
df.info()               # dtypes and non-null counts
print(df.describe())    # stats for numeric columns


Q6: Filter rows — boolean indexing

Filter employees in the Engineering department with salary above 85,000.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":       ["Rahim", "Sara", "James", "Nadia", "Amina"],
    "department": ["Engineering", "Marketing", "Engineering", "HR", "Engineering"],
    "salary":     [85000, 72000, 90000, 68000, 92000],
})

condition = (df["department"] == "Engineering") & (df["salary"] > 85000)
result    = df[condition]
print(result)


Q7: Add and drop columns

Add a bonus column (02% of salary) and drop the original salary column.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":   ["Rahim", "Sara", "James"],
    "salary": [85000, 72000, 90000],
})

df["bonus"]      = (df["salary"] * 0.02).round(0).astype(int)
df["total_comp"] = df["salary"] + df["bonus"]

print(df)

df_no_salary = df.drop(columns=["salary"])
print(df_no_salary)


Q8: Sort and rank

Sort employees by salary descending, then add a rank column.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":   ["Rahim", "Sara", "James", "Nadia", "Michael"],
    "salary": [85000, 72000, 90000, 68000, 75000],
})

df_sorted = df.sort_values("salary", ascending=False).reset_index(drop=True)
df_sorted["rank"] = df_sorted.index + 1

print(df_sorted)


Q9: Read and write CSV

Save the employees DataFrame to CSV and read it back.

Solution

import pandas as pd

df = pd.DataFrame({
    "name":       ["Rahim", "Sara", "James", "Nadia", "Michael"],
    "city":       ["Dhaka", "New York", "Berlin", "Tokyo", "Nairobi"],
    "salary":     [85000, 72000, 90000, 68000, 75000],
})

# Write
df.to_csv("employees.csv", index=False)
print("Saved to employees.csv")

# Read back
df2 = pd.read_csv("employees.csv")
print(df2)
print(df2.dtypes)


Q10: Apply — column transformation

Use .apply() to add a salary_bdt column (salaries are in USD, convert at 110).

Solution

import pandas as pd

df = pd.DataFrame({
    "name":       ["Rahim", "Sara", "James"],
    "salary_usd": [85000, 72000, 90000],
})

df["salary_bdt"] = df["salary_usd"].apply(lambda x: x * 110)

print(df)

Alternative — vectorized (preferred):

df["salary_bdt"] = df["salary_usd"] * 110


⬅️ Previous: 02-01: Exercises — Matplotlib Basics ➡️ Next: 03-02: Exercises — Pandas Data Manipulation