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):
⬅️ Previous: 02-01: Exercises — Matplotlib Basics ➡️ Next: 03-02: Exercises — Pandas Data Manipulation