Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Selected Reading
Python Pandas - Iterate and fetch the rows that contain the desired text
To iterate and fetch rows containing desired text in a Pandas DataFrame, you can use the itertuples() method combined with string search operations. The itertuples() method iterates over DataFrame rows as named tuples.
Basic Approach Using itertuples() and find()
Let's create a sample DataFrame to demonstrate the concept ?
import pandas as pd
# Create sample car data
data = {
'Car': ['BMW', 'Audi', 'Toyota', 'Mercedes', 'Honda', 'Lamborghini', 'Ford', 'Nissan', 'Lamborghini'],
'Place': ['Mumbai', 'Pune', 'Delhi', 'Bangalore', 'Chennai', 'Chandigarh', 'Kolkata', 'Hyderabad', 'Delhi'],
'UnitsSold': [120, 95, 80, 110, 75, 80, 60, 90, 100]
}
dataFrame = pd.DataFrame(data)
print("DataFrame...")
print(dataFrame)
DataFrame...
Car Place UnitsSold
0 BMW Mumbai 120
1 Audi Pune 95
2 Toyota Delhi 80
3 Mercedes Bangalore 110
4 Honda Chennai 75
5 Lamborghini Chandigarh 80
6 Ford Kolkata 60
7 Nissan Hyderabad 90
8 Lamborghini Delhi 100
Finding Rows with Specific Text
Use itertuples() with the find() method to search for specific text in a column ?
import pandas as pd
# Create sample data
data = {
'Car': ['BMW', 'Audi', 'Toyota', 'Mercedes', 'Honda', 'Lamborghini', 'Ford', 'Nissan', 'Lamborghini'],
'Place': ['Mumbai', 'Pune', 'Delhi', 'Bangalore', 'Chennai', 'Chandigarh', 'Kolkata', 'Hyderabad', 'Delhi'],
'UnitsSold': [120, 95, 80, 110, 75, 80, 60, 90, 100]
}
dataFrame = pd.DataFrame(data)
# Iterate and fetch rows containing 'Lamborghini' in Car column
print("Rows containing 'Lamborghini':")
for row in dataFrame.itertuples():
if row[1].find('Lamborghini') != -1:
print(row)
Rows containing 'Lamborghini': Pandas(Index=5, Car='Lamborghini', Place='Chandigarh', UnitsSold=80) Pandas(Index=8, Car='Lamborghini', Place='Delhi', UnitsSold=100)
Alternative Methods
Using str.contains()
A more Pandas-friendly approach using str.contains() method ?
import pandas as pd
# Create sample data
data = {
'Car': ['BMW', 'Audi', 'Toyota', 'Mercedes', 'Honda', 'Lamborghini', 'Ford', 'Nissan', 'Lamborghini'],
'Place': ['Mumbai', 'Pune', 'Delhi', 'Bangalore', 'Chennai', 'Chandigarh', 'Kolkata', 'Hyderabad', 'Delhi'],
'UnitsSold': [120, 95, 80, 110, 75, 80, 60, 90, 100]
}
dataFrame = pd.DataFrame(data)
# Using str.contains() - more efficient
filtered_rows = dataFrame[dataFrame['Car'].str.contains('Lamborghini')]
print("Filtered rows:")
print(filtered_rows)
Filtered rows:
Car Place UnitsSold
5 Lamborghini Chandigarh 80
8 Lamborghini Delhi 100
Case-Insensitive Search
For case-insensitive searches, use the case=False parameter ?
import pandas as pd
# Create sample data with mixed case
data = {
'Car': ['bmw', 'AUDI', 'Toyota', 'mercedes', 'Honda', 'lamborghini', 'Ford'],
'Place': ['Mumbai', 'Pune', 'Delhi', 'Bangalore', 'Chennai', 'Chandigarh', 'Kolkata'],
'UnitsSold': [120, 95, 80, 110, 75, 80, 60]
}
dataFrame = pd.DataFrame(data)
# Case-insensitive search
filtered_rows = dataFrame[dataFrame['Car'].str.contains('LAMBORGHINI', case=False)]
print("Case-insensitive search results:")
print(filtered_rows)
Case-insensitive search results:
Car Place UnitsSold
5 lamborghini Chandigarh 80
Comparison of Methods
| Method | Performance | Readability | Best For |
|---|---|---|---|
itertuples() + find() |
Slower | Medium | Custom logic needed |
str.contains() |
Faster | High | Simple text filtering |
str.contains(case=False) |
Faster | High | Case-insensitive search |
Conclusion
While itertuples() with find() works for text searching, using str.contains() is more efficient and Pythonic. Use str.contains() for simple filtering and itertuples() when you need custom row-by-row processing logic.
Advertisements
