Day 2: Mastering Pandas with Titanic Dataset

28 Jul 2025 5 mins read
Data Science NumPy Python 60DayDSChallenge

Your Practical Guide to Data Wrangling in Python


What is Pandas?

Pandas is a Python library that allows us to store, manipulate, clean, and analyze tabular data (like Excel or SQL tables). It’s essential for every Data Scientist.


Getting Started

Install & Import

pip install pandas
import pandas as pd

Pandas Data Structures

1. Series – One-dimensional data

ages = pd.Series([22, 38, 26])
print(ages)

2. DataFrame – Two-dimensional table

df = pd.DataFrame({'Age': [10,12], 'Name': ['Alice', 'Bob'})
print(df.head())

Titanic Dataset

We’ll use the Titanic dataset — a classic dataset containing information about passengers aboard the Titanic. You can download the titanic dataset from here

# to read the titanic dataset
df = pd.read_csv('train.csv'))


Exploring the Dataset

Basic Info

df.shape            # Number of rows & columns
df.columns          # Column names
df.info()           # Data types & non-null counts
df.describe()       # Stats for numeric columns

Accessing Data

Select Column(s)

df['Age']                    # Single column
df[['Name', 'Age']]          # Multiple columns

Select Row(s)

df.iloc[0]                   # First row
df.loc[0]                    # First row (label-based)
df.iloc[0:5]                 # First 5 rows

Filtering Rows

Example: Get all passengers older than 60

df[df['Age'] > 60]

Example: Female passengers in 1st class

df[(df['Sex'] == 'female') & (df['Pclass'] == 1)]

Handling Missing Data

Check for missing values

df.isnull().sum()

Drop rows with missing values

df.dropna(inplace=False)

Fill missing age with average age

mean_age = df['Age'].mean()
df['Age'].fillna(mean_age, inplace=True)

Renaming Columns

df.rename(columns={'Pclass': 'PassengerClass'}, inplace=True)

Creating New Columns

Example: Create a child/adult category

df['AgeGroup'] = df['Age'].apply(lambda x: 'Child' if x < 18 else 'Adult')

Aggregation and Grouping

Get average age by passenger class

df.groupby('PassengerClass')['Age'].mean()

Count survivors by gender

df.groupby('Sex')['Survived'].sum()

Value Counts

Count passengers in each class

df['PassengerClass'].value_counts()

Sorting

Sort by Age

df.sort_values(by='Age', ascending=True).head()

Bucketing Ages with pd.cut()

bins = [0, 20, 30, 40, 50, 60, 80]
labels = ['0-20', '21-30', '31-40', '41-50', '51-60', '61+']
df['AgeBin'] = pd.cut(df['Age'], bins=bins, labels=labels)

df['AgeBin'].value_counts().sort_index()

Summary

Task Function / Method
Load CSV pd.read_csv()
Inspect data df.info(), df.describe()
Select data df['col'], df.iloc[], df.loc[]
Filter rows Boolean indexing
Handle missing data isnull(), dropna(), fillna()
Group & summarize groupby(), agg()
Sort data sort_values()
Bucket data pd.cut()

What’s Next?

In Day 3, we’ll explore:


Code for Day 2 can be found on my github repository: Day 2 of Data Science

Bonus: Resources


All content is licensed under the CC BY-SA 4.0 License unless otherwise specified