query() for fast filtering in Pandas - Time & Space Complexity
We want to understand how the time to filter data using pandas' query() grows as the data size increases.
How does filtering with query() scale when we have more rows?
Analyze the time complexity of the following code snippet.
import pandas as pd
df = pd.DataFrame({
'age': range(1000),
'score': range(1000, 2000)
})
filtered = df.query('age > 500 and score < 1600')
This code creates a DataFrame with 1000 rows and filters rows where age is over 500 and score is less than 1600.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: pandas checks each row to see if it meets the filter condition.
- How many times: Once for every row in the DataFrame.
As the number of rows grows, pandas must check each row once to apply the filter.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks |
| 100 | About 100 checks |
| 1000 | About 1000 checks |
Pattern observation: The number of operations grows directly with the number of rows.
Time Complexity: O(n)
This means the time to filter grows in a straight line as the data size grows.
[X] Wrong: "Using query() filters data instantly no matter how big the data is."
[OK] Correct: Even though query() is fast, it still checks each row once, so bigger data takes more time.
Understanding how filtering scales helps you explain your choices when working with large data in real projects.
"What if we used multiple query() calls chained together? How would the time complexity change?"
Practice
query() method in pandas?Solution
Step 1: Understand the purpose of
Thequery()query()method is designed to filter rows in a DataFrame by using a string expression that specifies conditions on columns.Step 2: Compare with other DataFrame methods
Sorting is done bysort_values(), merging bymerge(), and creating new DataFrames is done by constructors, notquery().Final Answer:
To filter rows of a DataFrame using a readable string expression -> Option AQuick Check:
query() filters rows [OK]
- Confusing query() with sorting or merging methods
- Thinking query() creates new DataFrames
- Assuming query() modifies columns
age is greater than 30 using query()?Solution
Step 1: Check the correct string format for query()
The condition must be passed as a string, so it should be inside quotes:'age > 30'.Step 2: Validate the comparison operator and quotes
Operator must be >, not =>. Also, 30 should be a number, not a string with quotes.Final Answer:
df.query('age > 30') -> Option CQuick Check:
Use string with correct operator [OK]
- Omitting quotes around the condition string
- Using wrong comparison operator => instead of >
- Putting numbers inside quotes making them strings
import pandas as pd
df = pd.DataFrame({'name': ['Anna', 'Bob', 'Cara'], 'score': [85, 92, 78]})What is the output of
df.query('score >= 80')?Solution
Step 1: Identify rows where score >= 80
Scores are Anna:85, Bob:92, Cara:78. Only Anna and Bob have scores 80 or above.Step 2: Understand query() filters these rows
The query returns rows where the condition is true, so rows for Anna and Bob are returned.Final Answer:
Rows with names Anna and Bob only -> Option AQuick Check:
score >= 80 filters Anna and Bob [OK]
- Including rows that don't meet the condition
- Confusing >= with > or <= operators
- Assuming query returns all rows
df.query('age > 25 and city == New York')Solution
Step 1: Check string literals inside query()
String values like city names must be quoted inside the query string, e.g.,city == "New York".Step 2: Verify use of 'and' and column names
The 'and' operator is allowed, and column names do not need quotes inside the query string.Final Answer:
The string New York should be quoted inside the query string -> Option DQuick Check:
Quote string values inside query() [OK]
- Not quoting string literals in conditions
- Thinking 'and' is invalid in query()
- Quoting column names unnecessarily
df with columns temperature and humidity. You want to filter rows where temperature is above 20 and humidity is below 50. Which query() call correctly does this?Solution
Step 1: Understand logical operators in query()
Within query strings, useandandorfor combining conditions, not&or&&.Step 2: Match the condition requirements
The problem wants temperature > 20 and humidity < 50, so the correct operator isand.Final Answer:
df.query('temperature > 20 and humidity < 50') -> Option BQuick Check:
Use 'and' for multiple conditions in query() [OK]
- Using bitwise operators (&, &&) instead of 'and'
- Using 'or' instead of 'and' when both conditions needed
- Mixing Python operators outside query() syntax
Ready to prove it?
Pass the test and this pattern moves unknown
