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 Kaggle
# 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:
- Pivot tables
- Melt/unpivot
- Time series
- Window functions
- Performance tips
Code for Day 2 can be found on my github repository: Day 2 of Data Science