Created
July 29, 2015 14:02
-
-
Save Visgean/936890f57424ea824de2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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