Есть ли способ проверить отсутствие дат в области данных напрямую. Я хочу проверить, отсутствуют ли даты между 2013-01-19
по 2018-01-29
GWA_BTC GWA_ETH GWA_LTC GWA_XLM GWA_XRP
Date
2013-01-19 11,826.36 1,068.45 195.00 0.51 1.82
2013-01-20 13,062.68 1,158.71 207.58 0.52 1.75
...
2018-01-28 12,326.23 1,108.90 197.36 0.48 1.55
2018-01-29 11,397.52 1,038.21 184.92 0.47 1.43
Я попытался проверить это вручную, но это заняло много времени.
Вы можете использовать DatetimeIndex.difference (другое)
pd.date_range(start = '2013-01-19', end = '2018-01-29' ).difference(df.index)
Он возвращает элементы, не присутствующие в другом
В качестве минимального примера сделайте следующее:
>>> df
GWA_BTC GWA_ETH GWA_LTC GWA_XLM GWA_XRP
Date
2013-01-19 11,826.36 1,068.45 195.00 0.51 1.82
2013-01-20 13,062.68 1,158.71 207.58 0.52 1.75
2013-01-28 12,326.23 1,108.90 197.36 0.48 1.55
2013-01-29 11,397.52 1,038.21 184.92 0.47 1.43
И мы можем найти недостающие даты между 2013-01-19
и 2013-01-29
См. Ответ @Вайшали
Используйте .difference
чтобы найти разницу между вашим индексом datetime и множеством всех дат в пределах вашего диапазона:
pd.date_range('2013-01-19', '2013-01-29').difference(df.index)
Что возвращает:
DatetimeIndex(['2013-01-21', '2013-01-22', '2013-01-23', '2013-01-24',
'2013-01-25', '2013-01-26', '2013-01-27'],
dtype='datetime64[ns]', freq=None)
Вы можете повторно индексировать свой фреймворк, используя все даты в пределах вашего желаемого диапазона, и найти, где reindex
вставил NaN
s.
И чтобы найти отсутствующие даты между 2013-01-19
и 2013-01-29
:
>>> df.reindex(pd.date_range('2013-01-19', '2013-01-29')).isnull().all(1)
2013-01-19 False
2013-01-20 False
2013-01-21 True
2013-01-22 True
2013-01-23 True
2013-01-24 True
2013-01-25 True
2013-01-26 True
2013-01-27 True
2013-01-28 False
2013-01-29 False
Freq: D, dtype: bool
Эти значения с True
- это недостающие даты в исходном фрейме данных
df.index = pd.to_datetime(df.index)
при условии, что данные являются ежедневными нефинансовыми датами:
df.index.to_series().diff().dt.days > 1
Я не могу опубликовать комментарий, но вы можете пройти каждое значение и добавить 24 часа к предыдущему значению, чтобы узнать, соответствует ли дата?
import pandas as pd
a = [1,2,3,4,5]
b = [1,0.4,0.3,0.5,0.2]
df = pd.DataFrame({'a':a , 'b': b})
for i in range(len(df)):
prev = df.loc[i,'a']
if i is 0:
continue
else:
# Add 1 day to the current value and check with prev value
2014-07-13 to 2014-07-19
. Точно так же между данными есть некоторые пропущенные даты. Есть ли способ узнать, какие даты отсутствуют, вместо проверки вручную?