Skip to content

Introduction to Pandas for Data Manipulation in Python

Updated: at 05:01 AM

Pandas is a popular open-source Python library used for data analysis and manipulation. With its powerful data structures and easy to use tools, Pandas allows Python developers to work with tabular data in an efficient manner similar to relational databases.

This comprehensive guide will provide an introduction to using Pandas for manipulating data in Python. We will cover the key features of Pandas, its core data structures, and how to use its versatile tools to clean, analyze, and process data. Real-world examples and code samples are provided throughout to illustrate the concepts. By the end of this guide, you will have a solid understanding of how to leverage Pandas to wrangle, transform, and gain insights from complex datasets using Python.

Table of Contents

Open Table of Contents

Overview of Pandas

Pandas was created by Wes McKinney in 2008. The name “Pandas” stands for “Panel Data”, referring to its original use case for analyzing financial data in tabular format. Here are some key facts about Pandas:

Some major features offered by Pandas include:

By leveraging these features, Pandas provides an essential data analysis toolkit for Python programmers. Let’s now dive deeper into the fundamental data structures of Pandas.

Pandas Data Structures

The two primary data structures in Pandas are:

  1. Series - A one-dimensional array with axis labels, similar to columns in a table.

  2. DataFrame - A multi-dimensional tabular data structure with labeled axes (rows and columns).

These structures are built on top of NumPy ndarray objects and tuned for fast operations. Let’s look at each of them in more detail:

Pandas Series

A Pandas Series can be thought of as a column in a table. It is a one-dimensional array that can hold data of any NumPy data type, like integers, floats, strings, Python objects, etc.

Here is how to create a simple Pandas Series from a list:

import pandas as pd

data = [1, 2, 3, 4, 5]

ser = pd.Series(data)



0    1
1    2
2    3
3    4
4    5
dtype: int64

The output shows that each value is assigned an index automatically starting from 0. This index can be customized:

data = ['Jan', 'Feb', 'Mar', 'Apr', 'May']

ser = pd.Series(data, index=[100, 101, 102, 103, 104])



100    Jan
101    Feb
102    Mar
103    Apr
104    May
dtype: object

We can also use a Python dictionary to initialize a Series, where the keys become the indices:

data = {'Jan':1, 'Feb':2, 'Mar':3}

ser = pd.Series(data)



Jan    1
Feb    2
Mar    3
dtype: int64

Pandas Series support array-style operations like slicing, selection, aggregation, etc. making data manipulation easy and expressive:

ser[0] # Select first value
ser[:3] # Slice first three values
ser.max() # Get maximum value

In summary, Series is a fundamental one-dimensional building block for Pandas. It excels at representing columnar data with labels and supporting vectorized operations.

Pandas DataFrame

A Pandas DataFrame can be thought of as a table or spreadsheet of data with labeled axes. It is a two-dimensional data structure with columns that can be of different data types.

For example, we can create a DataFrame from a dictionary of equal length lists:

data = {'Name':['Tom', 'Jack', 'Steve'],
        'Age':[28, 34, 29],
        'City':['New York', 'Chicago', 'Seattle']}

df = pd.DataFrame(data)



   Name  Age       City
0   Tom   28   New York
1  Jack   34    Chicago
2 Steve   29    Seattle

Notice each column in the DataFrame is a Pandas Series. The row indices are automatically created starting from 0.

We can also create a DataFrame from a two-dimensional NumPy array:

import numpy as np

data = np.array([['Tom', 28, 'New York'],
                 ['Jack', 34, 'Chicago'],
                 ['Steve', 29, 'Seattle']])

df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])



   Name  Age       City
0   Tom   28   New York
1  Jack   34    Chicago
2 Steve   29    Seattle

Key properties of Pandas DataFrame:

Pandas DataFrame supports a wide range of operations like indexing, slicing, aggregation, filtering, joining, pivoting, etc. making it a very flexible tool for data manipulation.

Now that we have covered the basics of the two core Pandas data structures - let’s go through some practical examples of data manipulation using Pandas.

Data Manipulation with Pandas

Pandas offers a wide variety of functions and methods to manipulate data stored in Series and DataFrames. Let’s go through some common data manipulation tasks with examples:

Reading and Writing Data

Pandas provides easy I/O capabilities for loading data from external sources like CSV, Excel, databases, etc. into DataFrames and saving DataFrames back to files/databases.

For example, to read and write CSV data:

df = pd.read_csv('data.csv') # Read CSV into DataFrame

df.to_csv('new_data.csv') # Write DataFrame into CSV

Pandas can read/write a variety of file formats like Excel, JSON, SQL, HTML tables, etc. This allows seamless movement of data between different sources.

Data Selection

Pandas offers many features to select portions of the data via slicing, boolean indexing, label-based selection, etc.

For example, to select few rows:

df.loc[2:5] # Select rows at index 2, 3, 4, and 5

df.iloc[[1, 2, 8]] # Select 2nd, 3rd and 9th rows

Select based on column values:

df[df['Age'] > 30] # Select rows where Age is greater than 30

df[df['City'].isin(['New York', 'Chicago'])] # Rows where City is NY or Chicago

Select specific columns:

df[['Name', 'Age']] # Select just the Name and Age columns

df.loc[:, :'Age'] # All rows, columns from start to Age

There are many more options available for complex slicing/selection operations.

Adding and Removing Columns

New columns can be added to a DataFrame by simply assigning the values:

df['FullName'] = df['First'] + ' ' + df['Last'] # Add new column

Similarly, existing columns can be dropped:

del df['FullName'] # Deletes the FullName column

Sorting and Ordering Data

Sort DataFrame rows based on the values in one or more columns:

df = df.sort_values(by='Age') # Sort values by Age column

df = df.sort_values(by=['Age', 'Name']) # Sort by multiple columns

Data Cleaning

Pandas makes it easy to deal with missing data and clean messy data in real-world datasets.

For example, filter out rows with missing values:

df = df.dropna()

Replace missing values:

df = df.fillna(0) # Replace NaNs with 0

df['Age'].fillna(df['Age'].median(), inplace=True) # Fill NaN Ages with median

Data transformation methods like map(), apply(), applymap() allow executing custom logic for data cleaning.

Grouping and Aggregation

Pandas allows splitting the data into groups and computing aggregates for analysis.

For example, group by city and find average age per city:


More advanced aggregations can be done with aggregate(), filter(), transform(), and apply() methods on groups.

Reshaping and Pivoting Data

Pandas provides functions like melt() to unpack data, pivot() to create spreadsheets, and stack()/unstack() to restructure DataFrames between long and wide formats.

For example, pivot monthly data into columns:

df.pivot(index='Name', columns='Month', values='Sales')

These methods allow reshaping the data to suit analytical needs.

Merging and Joining DataFrames

Pandas has full-featured, high-performance in-memory join operations such as merge() and join() to combine datasets.

For example, to SQL-style join two DataFrames:

df = pd.merge(df1, df2, how='inner', on='key')

Other types of joins like outer, left, right joins are also supported. Joins by index or on columns are possible.

Plotting and Visualization

Pandas integrates nicely with Matplotlib to enable data visualization. Plotting DataFrame columns is as simple as:


More complex plots like scatter plots, histograms, subplots, etc. can be created as well.

In summary, these are some of the main data manipulation operations enabled by Pandas. The full details of each feature are beyond the scope of this guide, but this gave a high-level overview of how to use Pandas for cleaning, transforming, reshaping, merging, and visualizing data in Python effectively.

Real-World Example - Analyzing COVID Data

To make these Pandas concepts more concrete, let’s walk through a real-world data analysis example using COVID dataset.

We will:

  1. Load the COVID dataset into a DataFrame
  2. Clean the data
  3. Analyze and visualize case numbers

First, we load the data:

import pandas as pd

df = pd.read_csv('covid_data.csv')

Let’s check out what the data looks like:

   date        city  cases  deaths
0  1/1/20      Wuhan   1000      15
1  1/2/20      Wuhan   1300      25
2  1/3/20  Shanghai    100       2
3  1/4/20    Beijing    200       3
4  1/5/20    Shenzhen    50        0

It contains the number of COVID cases and deaths for different cities in China over time.

Next, we will clean the data a bit:

# Convert date to pandas datetime
df['date'] = pd.to_datetime(df['date'])

# Fill missing values with 0
df = df.fillna(0)

# Sort by date
df = df.sort_values('date')

Now let’s analyze the cases over time:

# Groupby date and aggregate cases
daily = df.groupby('date')[['cases']].sum().reset_index()

# Plot the daily cases
daily.plot(x='date', y='cases', title='COVID Cases in China')

This plots the daily case curve so we can visualize the trend. More analysis can be done like finding growth rates, doubling times, etc.

This demonstrates a simple yet realistic workflow of loading data, preparing it, and then analyzing/visualizing it using Pandas and Matplotlib. The same process can be applied to any domain-specific dataset.


In this comprehensive guide, we covered the fundamentals of using the Pandas library in Python for practical data manipulation tasks. We discussed:

Pandas combines the high performance of NumPy with intuitive data manipulation capabilities to make Python a robust environment for data science and analytics. With this introduction, you should be able to efficiently use Pandas for slicing and dicing data to gain insights from complex datasets.

Some next steps to build on these fundamentals would be learning more advanced Pandas functionality like multi-indexes, time series handling, etc. as well as integrating Pandas with other Python libraries like scikit-learn for applied machine learning. The official Pandas documentation and community resources are great for continuing your learning journey with Python for data analysis.