вернуть пропущенные даты Python - PullRequest
1 голос
/ 30 октября 2019

У меня есть файл CSV с 1600 датами, и я пытаюсь найти все пропущенные даты. Например:
03-10-2019
01-10-2019
29-09-2019
28-09-2019
должно возвращаться: 02-10-2019,30-09-2019.

Вот что я написал:

with open('measurements.csv','r') as csvfile:
df = pd.read_csv(csvfile,  delimiter=',')

timestamps = df['observation_time'] #Getting only the date

for line in timestamps:
date_str = line
try: # convert string to time
    date = date_time_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
    dates.append(date) 
except:
    print("Date parsing failed")

dates = pd.DataFrame(dates,columns =['actual_date']) 

pd.date_range(start = dates.min(), end = dates.max()).difference(dates.index)

Это возвращает ошибку, что

"Не удается преобразовать входные данные [actual_date 2018-09-1722:00:00 dtype: datetime64 [ns]] типа to Timestamp "

1 Ответ

1 голос
/ 30 октября 2019

Идея заключается в использовании DataFrame.asfreq для добавления всех пропущенных значений к DatetimeIndex, поэтому возможна фильтрация по boolean indexing с Series.isna:

df['observation_time'] = pd.to_datetime(df['observation_time'], dayfirst=True)
df1 = df.set_index(df['observation_time']).sort_index().asfreq('d')
print (df1)
                 observation_time
observation_time                 
2019-09-28             2019-09-28
2019-09-29             2019-09-29
2019-09-30                    NaT
2019-10-01             2019-10-01
2019-10-02                    NaT
2019-10-03             2019-10-03

dates = df1.index[df1['observation_time'].isna()]
print (dates )
DatetimeIndex(['2019-09-30', '2019-10-02'], dtype='datetime64[ns]', 
name='observation_time', freq=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...