Bird
Raised Fist0
Data Analysis Pythondata~20 mins

Date-based indexing and slicing in Data Analysis Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Date Slicing Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of date-based slicing on a DataFrame
What is the output of this code snippet that slices a DataFrame by date?
Data Analysis Python
import pandas as pd

dates = pd.date_range('2023-01-01', periods=5)
data = pd.DataFrame({'value': [10, 20, 30, 40, 50]}, index=dates)
result = data['2023-01-02':'2023-01-04']
print(result)
A
            value
2023-01-02     20
2023-01-03     30
2023-01-04     40
B
            value
2023-01-01     10
2023-01-02     20
2023-01-03     30
C
            value
2023-01-03     30
2023-01-04     40
2023-01-05     50
D
Empty DataFrame
Columns: [value]
Index: []
Attempts:
2 left
💡 Hint
Remember that slicing with dates in pandas includes both start and end dates.
❓ data_output
intermediate
1:30remaining
Number of rows after date-based filtering
How many rows remain after filtering this DataFrame for dates in March 2023?
Data Analysis Python
import pandas as pd
import numpy as np

np.random.seed(0)
dates = pd.date_range('2023-01-01', '2023-06-30')
data = pd.DataFrame({'value': np.random.randint(1, 100, len(dates))}, index=dates)
filtered = data['2023-03']
print(len(filtered))
A28
B31
C29
D30
Attempts:
2 left
💡 Hint
March always has 31 days.
🔧 Debug
advanced
1:30remaining
Identify the error in date-based slicing code
What error does this code raise when trying to slice a DataFrame by date?
Data Analysis Python
import pandas as pd

dates = pd.date_range('2023-01-01', periods=3)
data = pd.DataFrame({'value': [1, 2, 3]}, index=dates)
result = data['2023-01-04']
print(result)
AKeyError
BIndexError
CValueError
DTypeError
Attempts:
2 left
💡 Hint
The date '2023-01-04' is not in the DataFrame index.
❓ visualization
advanced
2:30remaining
Plotting data sliced by date range
Which option shows the correct plot output after slicing the DataFrame for April 2023?
Data Analysis Python
import pandas as pd
import matplotlib.pyplot as plt

dates = pd.date_range('2023-01-01', '2023-06-30')
values = range(len(dates))
data = pd.DataFrame({'value': values}, index=dates)
slice_april = data['2023-04']
slice_april.plot()
plt.show()
AA bar plot with x-axis from 2023-01-01 to 2023-01-31
BAn empty plot with no data points
CA scatter plot with x-axis from 2023-05-01 to 2023-05-31
DA line plot with x-axis from 2023-04-01 to 2023-04-30 and y-axis from 90 to 119
Attempts:
2 left
💡 Hint
The slice '2023-04' selects all dates in April 2023.
🧠 Conceptual
expert
2:00remaining
Understanding partial string indexing behavior
Given a DataFrame indexed by daily dates, what happens when you slice with '2023-02'?
AIt raises a KeyError because '2023-02' is not a full date.
BIt returns only the row for February 1, 2023.
CIt returns all rows with dates in February 2023, including all days from 1 to 28 or 29.
DIt returns rows for February 2023 and March 2023.
Attempts:
2 left
💡 Hint
Pandas supports partial string indexing for date ranges.

Practice

(1/5)
1. What does date-based indexing in pandas allow you to do?
easy
A. Select rows from a DataFrame using dates or date ranges
B. Change the data type of a column to datetime
C. Sort the DataFrame by numerical values
D. Merge two DataFrames based on a key column

Solution

  1. Step 1: Understand date-based indexing

    Date-based indexing lets you select rows by specifying dates or date ranges in the index.
  2. Step 2: Compare with other options

    Changing data types, sorting, or merging are different operations unrelated to date-based indexing.
  3. Final Answer:

    Select rows from a DataFrame using dates or date ranges -> Option A
  4. Quick Check:

    Date-based indexing = selecting rows by dates [OK]
Hint: Date-based indexing picks rows by date labels [OK]
Common Mistakes:
  • Confusing indexing with data type conversion
  • Thinking it sorts data automatically
  • Mixing it up with merging DataFrames
2. Which of the following is the correct syntax to select data for January 2023 from a DataFrame df with a datetime index?
easy
A. df['2023-01']
B. df.loc['January 2023']
C. df['01-2023']
D. df.loc[2023, 1]

Solution

  1. Step 1: Understand partial string indexing

    Using df['2023-01'] selects all rows in January 2023 by partial date string.
  2. Step 2: Check other options

    df.loc['January 2023'] is invalid syntax; df['01-2023'] is wrong format; df.loc[2023, 1] is invalid for datetime index.
  3. Final Answer:

    df['2023-01'] -> Option A
  4. Quick Check:

    Partial date string 'YYYY-MM' selects month [OK]
Hint: Use 'YYYY-MM' string to slice by month [OK]
Common Mistakes:
  • Using month-year in wrong order
  • Trying to use month name string directly
  • Using tuple indexing for dates
3. Given the DataFrame df with datetime index from '2023-01-01' to '2023-01-05' and a column 'value' as [10, 20, 30, 40, 50], what is the output of df['2023-01-03':'2023-01-05']['value'].tolist()?
medium
A. [10, 20, 30]
B. [20, 30, 40]
C. [30, 40, 50]
D. [40, 50]

Solution

  1. Step 1: Understand slicing by date range

    The slice '2023-01-03':'2023-01-05' selects rows from Jan 3 to Jan 5 inclusive.
  2. Step 2: Extract 'value' column and convert to list

    The values on these dates are 30, 40, and 50, so the list is [30, 40, 50].
  3. Final Answer:

    [30, 40, 50] -> Option C
  4. Quick Check:

    Date slice includes start and end dates [OK]
Hint: Date slices include both start and end dates [OK]
Common Mistakes:
  • Excluding the end date in slice
  • Confusing index positions with dates
  • Selecting wrong column
4. What is wrong with this code snippet to select data for February 2023 from a DataFrame df with datetime index?
df.loc['2023-02']
medium
A. It will raise a KeyError if the index is not sorted
B. It will raise a TypeError because string slicing is not allowed
C. It will return data for all of 2023 instead of February
D. Nothing is wrong; this is correct syntax

Solution

  1. Step 1: Check syntax for date-based slicing

    Using df.loc['2023-02'] is valid to select all rows in February 2023 if the index is datetime.
  2. Step 2: Confirm no errors occur

    This syntax works correctly and returns February data; no error or wrong output happens.
  3. Final Answer:

    Nothing is wrong; this is correct syntax -> Option D
  4. Quick Check:

    Partial date string with .loc works for datetime index [OK]
Hint: Use .loc with 'YYYY-MM' to slice by month [OK]
Common Mistakes:
  • Thinking string slicing is invalid with .loc
  • Assuming index must be sorted for this to work
  • Confusing .loc with .iloc for date strings
5. You have a DataFrame df indexed by datetime from '2023-01-01' to '2023-03-31'. How would you select all rows for the first quarter of 2023 using date-based slicing?
hard
A. df.loc['2023-01':'2023-03-01']
B. df['2023-01-01':'2023-03-31']
C. df.loc['2023-Q1']
D. df['2023-01-01':'2023-03']

Solution

  1. Step 1: Understand date range for Q1 2023

    Q1 covers January 1 to March 31, so the full date range is '2023-01-01' to '2023-03-31'.
  2. Step 2: Use slicing with full dates

    Using df['2023-01-01':'2023-03-31'] selects all rows in this range correctly.
  3. Step 3: Check other options

    df.loc['2023-Q1'] is not valid; df.loc['2023-01':'2023-03-01'] selects only up to March 1st, excluding the rest of March; df['2023-01-01':'2023-03'] ends on incomplete date.
  4. Final Answer:

    df['2023-01-01':'2023-03-31'] -> Option B
  5. Quick Check:

    Use full date range strings for quarters [OK]
Hint: Use full start and end dates for quarter slicing [OK]
Common Mistakes:
  • Using quarter notation like '2023-Q1' which is invalid
  • Using partial month strings that exclude days
  • Ending slice with incomplete date string
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard