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.

Updated on: 2026-03-26T13:26:10+05:30

294 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements