Bird
Raised Fist0
Data Analysis Pythondata~5 mins

Date arithmetic (Timedelta) in Data Analysis Python

Choose your learning style10 modes available
Introduction

Date arithmetic helps us add or subtract time from dates. It makes working with dates easy, like finding how many days between two dates or adding days to a date.

Calculating the number of days between two events, like project start and end dates.
Adding a certain number of days or hours to a date, like setting a deadline 7 days from today.
Finding the difference in time between two timestamps, such as login and logout times.
Adjusting dates for scheduling, like moving an appointment 3 days later.
Syntax
Data Analysis Python
from datetime import datetime, timedelta

# Create a timedelta object
delta = timedelta(days=5, hours=3)

# Add timedelta to a date
new_date = datetime.now() + delta

# Subtract timedelta from a date
old_date = datetime.now() - delta

timedelta represents a duration, like days, seconds, or hours.

You can add or subtract timedelta objects to datetime objects to get new dates.

Examples
This adds 10 days to today's date and prints the new date.
Data Analysis Python
from datetime import datetime, timedelta

# Add 10 days to current date
today = datetime.now()
future = today + timedelta(days=10)
print(future)
This calculates how many days are between June 1 and June 10, 2024.
Data Analysis Python
from datetime import datetime, timedelta

# Find difference between two dates
d1 = datetime(2024, 6, 1)
d2 = datetime(2024, 6, 10)
diff = d2 - d1
print(diff.days)
This subtracts 2 hours from the current time and prints the result.
Data Analysis Python
from datetime import datetime, timedelta

# Subtract 2 hours from current time
now = datetime.now()
past = now - timedelta(hours=2)
print(past)
Sample Program

This program shows how to add and subtract time from the current date and how to find the number of days between two fixed dates.

Data Analysis Python
from datetime import datetime, timedelta

# Current date and time
now = datetime.now()
print(f"Now: {now}")

# Create a timedelta of 7 days and 5 hours
delta = timedelta(days=7, hours=5)

# Add timedelta to current date
future_date = now + delta
print(f"Future date (7 days, 5 hours later): {future_date}")

# Subtract timedelta from current date
past_date = now - delta
print(f"Past date (7 days, 5 hours earlier): {past_date}")

# Calculate difference between two dates
start_date = datetime(2024, 6, 1)
end_date = datetime(2024, 6, 15)
difference = end_date - start_date
print(f"Days between {start_date.date()} and {end_date.date()}: {difference.days}")
OutputSuccess
Important Notes

When printing datetime objects, the exact time will depend on when the code runs.

You can specify days, seconds, microseconds, milliseconds, minutes, hours, and weeks in timedelta.

Subtracting two datetime objects gives a timedelta representing the difference.

Summary

Date arithmetic uses timedelta to add or subtract time from dates.

You can find differences between dates or shift dates forward or backward easily.

This is useful for scheduling, deadlines, and measuring time intervals.

Practice

(1/5)
1. What does the timedelta object represent in Python's date arithmetic?
easy
A. A method to convert strings to dates
B. A specific date and time value
C. A function to format dates
D. A duration or difference between two dates or times

Solution

  1. Step 1: Understand the purpose of timedelta

    The timedelta object is used to represent a span of time, such as days, seconds, or microseconds.
  2. Step 2: Differentiate timedelta from other date/time objects

    Unlike a specific date or time, timedelta measures the difference or duration between two dates or times.
  3. Final Answer:

    A duration or difference between two dates or times -> Option D
  4. Quick Check:

    timedelta = duration/difference [OK]
Hint: timedelta means time difference or duration [OK]
Common Mistakes:
  • Confusing timedelta with a specific date
  • Thinking timedelta formats dates
  • Assuming timedelta converts strings
2. Which of the following is the correct way to create a timedelta of 5 days in Python?
easy
A. timedelta(5 days)
B. timedelta(seconds=5)
C. timedelta(days=5)
D. timedelta(day=5)

Solution

  1. Step 1: Recall timedelta constructor syntax

    The timedelta constructor accepts keyword arguments like days, seconds, etc.
  2. Step 2: Identify the correct keyword and format

    timedelta(5 days): syntax error ('days' undefined). timedelta(seconds=5): 5 seconds not days. timedelta(day=5): invalid keyword 'day'. timedelta(days=5): correct days=5.
  3. Final Answer:

    timedelta(days=5) -> Option C
  4. Quick Check:

    Use keyword days=5 for 5 days [OK]
Hint: Use keyword days=number to create timedelta days [OK]
Common Mistakes:
  • Using 'days' without quotes causing NameError
  • Using seconds=5 instead of days=5
  • Misspelling 'days' as 'day'
3. What will be the output of this code?
from datetime import datetime, timedelta
start = datetime(2024, 6, 10)
new_date = start + timedelta(days=7)
print(new_date.strftime('%Y-%m-%d'))
medium
A. 2024-06-17
B. 2024-06-03
C. 2024-07-10
D. 2024-06-10

Solution

  1. Step 1: Understand the initial date

    The variable start is June 10, 2024.
  2. Step 2: Add 7 days using timedelta

    Adding 7 days to June 10 results in June 17, 2024.
  3. Step 3: Format the date output

    The strftime formats the date as 'YYYY-MM-DD', so output is '2024-06-17'.
  4. Final Answer:

    2024-06-17 -> Option A
  5. Quick Check:

    June 10 + 7 days = June 17 [OK]
Hint: Add days to date, then format output string [OK]
Common Mistakes:
  • Subtracting days instead of adding
  • Misreading date format
  • Confusing month and day positions
4. Identify the error in this code snippet:
from datetime import datetime, timedelta
start = datetime(2024, 6, 10)
new_date = start + timedelta(day=7)
print(new_date)
medium
A. timedelta uses invalid keyword 'day'
B. datetime object cannot be added to timedelta
C. print statement syntax is incorrect
D. datetime constructor missing time parameters

Solution

  1. Step 1: Check timedelta constructor usage

    The timedelta constructor requires keyword arguments like days=7; day=7 is invalid keyword causing TypeError.
  2. Step 2: Verify other parts of code

    Adding timedelta to datetime is valid, print syntax is correct, and time parameters are optional.
  3. Final Answer:

    timedelta uses invalid keyword 'day' -> Option A
  4. Quick Check:

    timedelta(days=7) needed, not day=7 [OK]
Hint: Always use keyword days= for timedelta days [OK]
Common Mistakes:
  • Misspelling 'days' as 'day'
  • Thinking datetime + timedelta is invalid
  • Assuming print syntax error
5. You have a DataFrame with a column 'start_date' of type datetime. You want to create a new column 'deadline' that is 10 days after 'start_date'. Which code correctly does this using pandas and timedelta?
import pandas as pd
from datetime import timedelta

df = pd.DataFrame({'start_date': pd.to_datetime(['2024-06-01', '2024-06-05'])})
# Which line correctly adds 10 days?
hard
A. df['deadline'] = df['start_date'] + timedelta(seconds=10)
B. df['deadline'] = df['start_date'] + pd.Timedelta(days=10)
C. df['deadline'] = df['start_date'] + timedelta(day=10)
D. df['deadline'] = df['start_date'] + pd.timedelta(days=10)

Solution

  1. Step 1: Understand pandas datetime addition

    When adding time to pandas datetime columns, use pd.Timedelta for vectorized operations.
  2. Step 2: Check each option

    df['deadline'] = df['start_date'] + pd.Timedelta(days=10): correct pd.Timedelta(days=10). df['deadline'] = df['start_date'] + timedelta(seconds=10): timedelta(seconds=10) adds seconds not days. df['deadline'] = df['start_date'] + timedelta(day=10): invalid keyword day=10. df['deadline'] = df['start_date'] + pd.timedelta(days=10): pd.timedelta doesn't exist.
  3. Final Answer:

    df['deadline'] = df['start_date'] + pd.Timedelta(days=10) -> Option B
  4. Quick Check:

    Use pd.Timedelta for pandas datetime addition [OK]
Hint: Use pd.Timedelta(days=10) to add days to pandas datetime [OK]
Common Mistakes:
  • Using seconds=10 instead of days=10
  • Using invalid keyword 'day=10'
  • Wrong capitalization pd.timedelta
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