Exploratory data analysis workflow in Pandas - Time & Space Complexity
When we explore data using pandas, we run several steps to understand it better.
We want to know how the time needed grows as the data gets bigger.
Analyze the time complexity of the following code snippet.
import pandas as pd
df = pd.read_csv('data.csv')
summary = df.describe()
missing = df.isnull().sum()
value_counts = df['category'].value_counts()
correlations = df.corr()
This code loads data, summarizes it, counts missing values, counts categories, and finds correlations.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: pandas scans through each column and row to compute statistics.
- How many times: Each operation touches all rows once or twice depending on the method.
As the number of rows grows, the time to compute summaries and counts grows roughly in direct proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 times the work for each column |
| 100 | About 100 times the work for each column |
| 1000 | About 1000 times the work for each column |
Pattern observation: The work grows linearly with the number of rows.
Time Complexity: O(n)
This means the time needed grows roughly in direct proportion to the number of rows in the data.
[X] Wrong: "The time to get summaries stays the same no matter how big the data is."
[OK] Correct: Each summary needs to look at every row, so more rows mean more work and more time.
Understanding how data size affects analysis time helps you explain your approach clearly and shows you know how tools work under the hood.
"What if we added a step that compares every row to every other row? How would the time complexity change?"
Practice
exploratory data analysis workflow?Solution
Step 1: Understand the initial data
Exploratory data analysis starts by looking at the first few rows to get a feel for the data structure and values.Step 2: Avoid premature actions
Jumping to modeling or removing missing data without understanding can cause mistakes.Final Answer:
Viewing the first few rows of the dataset -> Option AQuick Check:
First step = View data sample [OK]
- Starting with modeling before understanding data
- Removing missing values without checking their impact
- Ignoring data overview and jumping to conclusions
df?Solution
Step 1: Identify summary statistics function
df.describe()returns count, mean, std, min, max, and quartiles for numeric columns.Step 2: Differentiate other commands
df.head()shows first rows,df.info()shows data types, anddf.sample()shows random rows.Final Answer:
df.describe() -> Option CQuick Check:
Summary stats = df.describe() [OK]
- Using df.head() to get statistics
- Confusing df.info() with statistical summary
- Expecting df.sample() to summarize data
df below, what is the output of df.isnull().sum()?
import pandas as pd
data = {'A': [1, 2, None], 'B': [None, 2, 3], 'C': [1, 2, 3]}
df = pd.DataFrame(data)Solution
Step 1: Check missing values per column
Column 'A' has one None, 'B' has one None, 'C' has none.Step 2: Use isnull().sum() to count missing
This method counts missing values per column, so output is {'A': 1, 'B': 1, 'C': 0}.Final Answer:
{'A': 1, 'B': 1, 'C': 0} -> Option AQuick Check:
Missing counts = {'A':1,'B':1,'C':0} [OK]
- Counting total missing instead of per column
- Confusing None with zero or empty string
- Misreading which columns have missing values
df.info() but get an error: AttributeError: 'DataFrame' object has no attribute 'infoo'. What is the likely cause?Solution
Step 1: Check the error message
The error says 'infoo' attribute not found, which suggests a typo in method name.Step 2: Confirm correct method name
The correct method isdf.info()with one 'o'.Final Answer:
You typed the method name incorrectly -> Option BQuick Check:
Typo in method name = error [OK]
- Assuming empty DataFrame causes this error
- Forgetting to import pandas
- Thinking DataFrame must have columns to use info()
df with columns ['Age', 'Salary', 'Department']. You want to find the average salary per department but only for employees older than 30. Which pandas workflow is correct?Solution
Step 1: Filter rows where Age > 30
Usedf[df['Age'] > 30]to keep only employees older than 30.Step 2: Group filtered data by Department and calculate mean Salary
Apply.groupby('Department')['Salary'].mean()on filtered data to get average salary per department.Final Answer:
df[df['Age'] > 30].groupby('Department')['Salary'].mean() -> Option DQuick Check:
Filter then group and mean =df[df['Age'] > 30].groupby('Department')['Salary'].mean()[OK]
- Grouping before filtering data
- Trying to filter after aggregation
- Using mean() without grouping
Ready to prove it?
Pass the test and this pattern moves unknown
