In data analysis, it's often necessary to extract only a portion of your data — whether it’s a few rows, specific columns, or a combination of both. This process is called slicing, and in Pandas, it’s fast, flexible, and powerful.
In this article, you'll learn:
-
✅ What slicing means in Pandas
-
✅ How to slice rows and columns
-
✅ Using
.loc[]
,.iloc[]
, and direct slicing -
✅ Slicing with conditions
-
✅ Full working examples
-
✅ Tips and common pitfalls
What is Slicing in Pandas?
Slicing refers to extracting parts (or slices) of a Pandas DataFrame or Series. It’s similar to slicing lists in Python, but with more flexibility and structure due to labels and indexing.
Step 1: Import Pandas and Create Sample Data
import pandas as pd
# Sample DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 30, 35, 40, 45],
'Score': [88, 92, 85, 90, 95]
}
df = pd.DataFrame(data)
Output:
Name Age Score
0 Alice 25 88
1 Bob 30 92
2 Charlie 35 85
3 David 40 90
4 Eva 45 95
Slicing Rows
Slice by index range:
df[1:4]
Output:
Name Age Score
1 Bob 30 92
2 Charlie 35 85
3 David 40 90
Just like Python lists, slicing with
df[start:stop]
includesstart
and excludesstop
.
Slicing Columns
Select specific columns:
df[['Name', 'Score']]
Output:
Name Score
0 Alice 88
1 Bob 92
2 Charlie 85
3 David 90
4 Eva 95
Always wrap column names in a list (e.g.,
[['Name']]
) for multiple columns.
.loc[]
– Label-based Slicing
.loc[]
is used to slice based on labels (i.e., row index names and column names).
Slice rows by label and select columns:
df.loc[1:3, ['Name', 'Score']]
Output:
Name Score
1 Bob 92
2 Charlie 85
3 David 90
loc[]
includes both start and end index when slicing.
.iloc[]
– Position-based Slicing
.iloc[]
slices using integer positions (like list slicing).
df.iloc[0:3, 1:3]
Output:
Age Score
0 25 88
1 30 92
2 35 85
iloc[]
works like regular Python slices: start is inclusive, end is exclusive.
Conditional Slicing (Boolean Indexing)
You can slice data based on conditions:
df[df['Score'] > 90]
Output:
Name Age Score
1 Bob 30 92
4 Eva 45 95
Combine conditions:
df[(df['Score'] > 90) & (df['Age'] < 40)]
✅ Full Working Example
import pandas as pd
# Create sample DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 30, 35, 40, 45],
'Score': [88, 92, 85, 90, 95]
}
df = pd.DataFrame(data)
# Slice rows from index 1 to 3
rows = df[1:4]
# Select 'Name' and 'Score' columns for rows 0 to 2
subset = df.loc[0:2, ['Name', 'Score']]
# Slice by position using iloc
position_slice = df.iloc[2:5, 0:2]
# Filter with condition
filtered = df[df['Score'] > 90]
print("Row Slice:\n", rows)
print("\nLabel-based Slice:\n", subset)
print("\nPosition-based Slice:\n", position_slice)
print("\nFiltered by Condition:\n", filtered)
Tips & Best Practices
-
Use
.loc[]
when working with labeled indexes. -
Use
.iloc[]
when positions are more reliable than labels. -
Always double-check if slicing is inclusive or exclusive.
-
Combine slicing and filtering for powerful subsetting.
-
For performance, avoid unnecessary copies when slicing large datasets.
⚠️ Common Pitfalls
Pitfall | Fix |
---|---|
Using df[0:2] for columns |
Use df.iloc[:, 0:2] or df[['col1', 'col2']] instead |
Mixing loc and iloc logic |
Remember: loc is label-based, iloc is position-based |
KeyError in .loc[] |
Ensure column names are spelled correctly (case-sensitive) |
Trying to slice with a single column name | Wrap it in a list: df[['Name']] not df['Name', 'Age'] |
Summary
Pandas slicing is an essential tool for data manipulation and analysis. Whether you're extracting rows, columns, or complex subsets — understanding slicing techniques will make your workflow more efficient.
Key Takeaways:
-
Use
df[start:end]
for basic row slicing -
Use
.loc[]
for label-based slicing -
Use
.iloc[]
for position-based slicing -
Combine slicing with conditions for flexible filtering