Skip to content

Instantly share code, notes, and snippets.

@Visgean
Created July 29, 2015 14:02
Show Gist options
  • Select an option

  • Save Visgean/936890f57424ea824de2 to your computer and use it in GitHub Desktop.

Select an option

Save Visgean/936890f57424ea824de2 to your computer and use it in GitHub Desktop.
def date_range(first_date, second_date):
"""
Returns range of dates between first and second date
:type first_date: datetime.date
:type second_date: datetime.date
:return: list of dates
"""
if first_date == second_date:
return []
elif first_date > second_date:
return date_range(second_date, first_date)
diff = second_date - first_date
return [
first_date + timedelta(days=x) for x in range(1, diff.days)
]
def fill_missing_dates(data, date_from, date_to, default_value=None):
"""
Doplni dny ktera nejsou v datasetu.
:param data: {datetime: value} - dictionary of daily stats for example
:type data: dict
:param date_from: datetime
:type date_from: datetime.date
:param date_to: datetime
:type date_to: datetime.date
:param default_value: value to use in
:return: dictionary with filled dates
"""
# get real date range which might differ from input data
min_date = min([date_from, min(data.keys())]) if date_from else min(data.keys())
max_date = max([date_to, max(data.keys())]) if date_to else min(data.keys())
full_day_range = date_range(min_date, max_date)
missing_days = set(full_day_range) - set(data.keys())
for missing_day in missing_days:
data[missing_day] = default_value
return data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment