Skip to main content

Python Pandas: How to Get All Sundays of a Year Using Pandas

Finding all occurrences of a specific weekday within a year is a common task in scheduling, reporting, and time-series analysis. Whether you need to count business days, plan weekly events, or build a calendar-based dataset, Pandas' date_range() function handles the calendar logic automatically with weekly frequency codes. It correctly accounts for years that have 52 versus 53 occurrences of a given weekday, so you never have to worry about edge cases.

In this guide, you will learn how to generate all Sundays (or any other weekday) in a year, format the output, and apply the results in practical scenarios.

Basic Usage with date_range()

Use the freq='W-SUN' frequency code to generate all Sundays within a date range:

import pandas as pd

sundays = pd.date_range(start='2024-01-01', end='2024-12-31', freq='W-SUN')

print(f"Number of Sundays in 2024: {len(sundays)}")
print(sundays[:5])

Output:

Number of Sundays in 2024: 52
DatetimeIndex(['2024-01-07', '2024-01-14', '2024-01-21', '2024-01-28',
'2024-02-04'],
dtype='datetime64[ns]', freq='W-SUN')

The first Sunday of 2024 falls on January 7th, and Pandas generates every subsequent Sunday through the end of the year.

Frequency Codes for Any Weekday

The W- prefix followed by a three-letter day abbreviation lets you target any day of the week:

CodeDay
W-SUNSunday
W-MONMonday
W-TUETuesday
W-WEDWednesday
W-THUThursday
W-FRIFriday
W-SATSaturday
import pandas as pd

# All Fridays in 2024
fridays = pd.date_range('2024-01-01', '2024-12-31', freq='W-FRI')
print(f"Fridays in 2024: {len(fridays)}")

# All Mondays in 2024
mondays = pd.date_range('2024-01-01', '2024-12-31', freq='W-MON')
print(f"Mondays in 2024: {len(mondays)}")

Output:

Fridays in 2024: 52
Mondays in 2024: 53

Why Use start/end Instead of periods

Some years have 53 occurrences of a particular weekday while others have 52. Using date boundaries ensures you always get the correct count:

import pandas as pd

# 2023 has 53 Sundays
sundays_2023 = pd.date_range('2023-01-01', '2023-12-31', freq='W-SUN')
print(f"Sundays in 2023: {len(sundays_2023)}")

# 2024 has 52 Sundays
sundays_2024 = pd.date_range('2024-01-01', '2024-12-31', freq='W-SUN')
print(f"Sundays in 2024: {len(sundays_2024)}")

Output:

Sundays in 2023: 53
Sundays in 2024: 52
tip

Avoid using periods=52 to generate a year's worth of weekdays. In years with 53 occurrences, you would miss the last one. Specifying start and end dates lets Pandas determine the correct count automatically.

Formatting the Output

Convert the DatetimeIndex to formatted strings for display or export:

import pandas as pd

sundays = pd.date_range('2024-01-01', '2024-12-31', freq='W-SUN')

# ISO format
iso_dates = sundays.strftime('%Y-%m-%d').tolist()
print(iso_dates[:3])

# Human-readable format
readable = sundays.strftime('%A, %B %d, %Y').tolist()
print(readable[0])

Output:

['2024-01-07', '2024-01-14', '2024-01-21']
Sunday, January 07, 2024

Practical Examples

Building a Sunday Calendar DataFrame

import pandas as pd

sundays = pd.date_range('2024-01-01', '2024-12-31', freq='W-SUN')

df = pd.DataFrame({
'Date': sundays,
'Week_Number': sundays.isocalendar().week,
'Month': sundays.month_name()
})

print(df.head())

Output:

                 Date  Week_Number     Month
2024-01-07 2024-01-07 1 January
2024-01-14 2024-01-14 2 January
2024-01-21 2024-01-21 3 January
2024-01-28 2024-01-28 4 January
2024-02-04 2024-02-04 5 February

Counting Sundays per Month

import pandas as pd

sundays = pd.date_range('2024-01-01', '2024-12-31', freq='W-SUN')

monthly_counts = sundays.to_series().groupby(sundays.month_name()).count()

print(monthly_counts)

Output:

April        4
August 4
December 5
February 4
January 4
July 4
June 5
March 5
May 4
November 4
October 4
September 5
dtype: int64

Filtering to a Specific Month

import pandas as pd

sundays = pd.date_range('2024-01-01', '2024-12-31', freq='W-SUN')

# Sundays in December only
december_sundays = sundays[sundays.month == 12]

for d in december_sundays:
print(d.strftime('%B %d, %Y'))

Output:

December 01, 2024
December 08, 2024
December 15, 2024
December 22, 2024
December 29, 2024

Reusable Function for Any Weekday

import pandas as pd

def get_weekdays_in_year(year, day_code='W-SUN'):
"""Get all occurrences of a specific weekday in a given year."""
return pd.date_range(
start=f'{year}-01-01',
end=f'{year}-12-31',
freq=day_code
)

# All Wednesdays in 2025
wednesdays = get_weekdays_in_year(2025, 'W-WED')
print(f"Wednesdays in 2025: {len(wednesdays)}")
print(wednesdays[:3].strftime('%Y-%m-%d').tolist())

Output:

Wednesdays in 2025: 53
['2025-01-01', '2025-01-08', '2025-01-15']

Quick Reference

GoalCode
All Sundayspd.date_range(start, end, freq='W-SUN')
All Mondayspd.date_range(start, end, freq='W-MON')
Format as strings.strftime('%Y-%m-%d')
Convert to list.tolist()
Count occurrenceslen(result)
Filter by monthresult[result.month == 12]

Use pd.date_range(start='YYYY-01-01', end='YYYY-12-31', freq='W-SUN') to get all Sundays in a year.

The W- frequency pattern works for any weekday by appending the three-letter abbreviation.

Always use date boundaries (start and end) rather than periods to correctly handle years with varying numbers of a given weekday.