We extract date components like year, month, and day from date columns to group, filter, and analyze time-based data more easily.
Extracting date components (year, month, day) in Data Analysis Python
df['column'].dt.year df['column'].dt.month df['column'].dt.day
The .dt accessor works only on datetime columns in pandas.
Use pd.to_datetime() first if the column is stored as a string.
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
This program creates a table of orders with dates and amounts. It converts the date strings to datetime objects using pd.to_datetime(), then extracts year, month, and day into separate columns using the .dt accessor. Finally, it groups orders by month and calculates total amounts per month.
import pandas as pd # Create sample data with dates orders = pd.DataFrame({ 'order_date': ['2024-01-15', '2024-03-22', '2024-07-08', '2024-11-30'], 'amount': [150, 200, 320, 180] }) # Convert string to datetime orders['order_date'] = pd.to_datetime(orders['order_date']) # Extract date components orders['year'] = orders['order_date'].dt.year orders['month'] = orders['order_date'].dt.month orders['day'] = orders['order_date'].dt.day print(orders) # Group by month and sum amounts monthly_totals = orders.groupby('month')['amount'].sum() print('\nMonthly totals:') print(monthly_totals)
Always convert date columns to datetime type before using .dt accessor.
Use .dt.month_name() to get month names like January, February instead of numbers.
Use .dt.day_name() to get weekday names like Monday, Tuesday.
Use .dt.year, .dt.month, and .dt.day to extract date parts.
Convert strings to datetime first with pd.to_datetime().
Extracted components are useful for grouping, filtering, and time-based analysis.
Practice
dt.year attribute do when applied to a pandas datetime column?Solution
Step 1: Understand pandas datetime attributes
Thedtaccessor allows extraction of date parts like year, month, day from datetime columns.Step 2: Identify what
dt.yearextractsdt.yearspecifically extracts the year component from each datetime value.Final Answer:
Extracts the year part from each date in the column -> Option DQuick Check:
dt.year= year extraction [OK]
- Confusing dt.year with dt.month or dt.day
- Thinking dt.year converts to string
- Using dt.year on non-datetime columns
date_col?Solution
Step 1: Recall pandas datetime accessor usage
To extract date parts, use thedtaccessor followed by the attribute without parentheses.Step 2: Identify correct syntax for month extraction
The correct syntax isdate_col.dt.month. Parentheses are not used because it's an attribute, not a method.Final Answer:
date_col.dt.month -> Option AQuick Check:
Usedt.monthattribute, no parentheses [OK]
- Adding parentheses like date_col.month()
- Trying to access month as a dictionary key
- Using a function month() without import
import pandas as pd dates = pd.Series(pd.to_datetime(['2023-01-15', '2022-12-31', '2024-07-04'])) months = dates.dt.month print(months.tolist())
Solution
Step 1: Understand the input dates and extraction
The dates are '2023-01-15', '2022-12-31', and '2024-07-04'. Extractingdt.monthgets the month numbers: 1, 12, and 7.Step 2: Convert the extracted months to list
Thetolist()method converts the pandas Series to a Python list: [1, 12, 7].Final Answer:
[1, 12, 7] -> Option AQuick Check:
Months extracted = [1, 12, 7] [OK]
- Confusing day with month values
- Expecting month names instead of numbers
- Using dt.day instead of dt.month
import pandas as pd dates = pd.Series(['2023-01-15', '2022-12-31']) years = dates.dt.year print(years)
Solution
Step 1: Check the data type of dates
ThedatesSeries contains strings, not datetime objects.Step 2: Understand dt accessor requirements
Thedtaccessor works only on datetime dtype Series. Without conversion, it raises an error.Final Answer:
dates is not converted to datetime type before using dt accessor -> Option CQuick Check:
Convert strings to datetime before dt.year [OK]
- Forgetting pd.to_datetime conversion
- Assuming dt.year works on string Series
- Misreading error as syntax problem
df with a datetime column 'order_date'. You want to add three new columns: 'year', 'month', and 'day' extracted from 'order_date'. Which code correctly does this?Solution
Step 1: Confirm datetime column usage
To extract date parts efficiently, use thedtaccessor on the datetime column.Step 2: Check each option's method
df['year'] = df['order_date'].dt.year df['month'] = df['order_date'].dt.month df['day'] = df['order_date'].dt.day usesdt.year,dt.month, anddt.daycorrectly. df['year'] = df['order_date'].year df['month'] = df['order_date'].month df['day'] = df['order_date'].day tries to access attributes directly on Series, which fails. df['year'] = df['order_date'].apply(lambda x: x.year) df['month'] = df['order_date'].apply(lambda x: x.month) df['day'] = df['order_date'].apply(lambda x: x.day) works but is slower due to apply. df['year'] = df['order_date'].str.year df['month'] = df['order_date'].str.month df['day'] = df['order_date'].str.day incorrectly usesstraccessor.Final Answer:
df['year'] = df['order_date'].dt.year df['month'] = df['order_date'].dt.month df['day'] = df['order_date'].dt.day -> Option BQuick Check:
Use .dt accessor for vectorized date extraction [OK]
- Accessing year/month/day directly on Series
- Using .str accessor on datetime columns
- Using apply unnecessarily slowing code
Ready to prove it?
Pass the test and this pattern moves unknown
