Я выполняю повторную выборку данных, и мне было интересно, почему повторная выборка 1-минутных данных в 5-минутные данные создает БОЛЬШЕ временных интервалов, чем мой исходный набор данных? Кроме того, почему t передискретизируется до 11 декабря 2018 г. (на 11 дней дольше!), чем исходный набор данных?
1-минутные данные:
результат пересчета на 5-минутные интервалы:
Вот как я делаю повторную выборку:
df1.loc[:,'qKfz_gesamt'].resample('5min').mean()
Если проверить df1['qKfz_gesamt'].resample('5min').mean()
против df1['qKfz_gesamt'].resample('5min').mean().dropna()
, получится одинаковая длина?
Я думаю, проблема в том, что resample
создают последовательные значения, и если они не существуют в оригинале, добавляются NaN, поэтому возможные выходные данные имеют больше значений.
Длина меньше, но начало и конец все еще «длиннее», чем исходные данные...
beginning and ends are still "longer"
- можно подробнее?
1-минутные данные идут до 30.11.2018 и передискретизируются 5-минутные данные до 11.12.2018 (+ 11 дней!). Откуда могли взяться те дни!?!
Может быть, данные находятся в другом месте, что такое исходные данные print (df1['qKfz_gesamt'].index.max())
?
И возможно несколько месяцев меняются местами с днями в datetime? Итак, 12-11-2018
разбирается как декабрь, а должен быть ноябрь?
Я думаю, что парсинг дат работает нормально. Если я делаю print (df1['qKfz_gesamt'].index.max())
, это продолжается до 2018-12-11
, поэтому, я думаю, мне нужно вручную выбрать диапазон дат, а затем выполнить повторную выборку?
нужно отфильтровать дату и время по максимальному, например df1 = df1.loc[:'2018-11-30', :]
?
да...похоже! Большое спасибо за Вашу помощь :)
Мне было интересно, почему повторная выборка 1-минутных данных в 5-минутные данные создает БОЛЬШЕ временных интервалов, чем мой исходный набор данных?
Проблема в том, что если никакие последовательные значения в исходных пандах не создают последовательных 5-минутных интервалов, а для несуществующих значений создаются NaNs
:
df1 = pd.DataFrame({'qKfz_gesamt': range(4)},
index=pd.to_datetime(['2018-11-25 00:00:00','2018-11-25 00:01:00',
'2018-11-25 00:02:00','2018-11-25 00:15:00']))
print (df1)
qKfz_gesamt
2018-11-25 00:00:00 0
2018-11-25 00:01:00 1
2018-11-25 00:02:00 2
2018-11-25 00:15:00 3
print (df1['qKfz_gesamt'].resample('5min').mean())
2018-11-25 00:00:00 1.0
2018-11-25 00:05:00 NaN
2018-11-25 00:10:00 NaN
2018-11-25 00:15:00 3.0
Freq: 5T, Name: qKfz_gesamt, dtype: float64
print (df1['qKfz_gesamt'].resample('5min').mean().dropna())
2018-11-25 00:00:00 1.0
2018-11-25 00:15:00 3.0
Name: qKfz_gesamt, dtype: float64
почему t передискретизируется до 11 декабря 2018 г. (на 11 дней дольше!), чем исходный набор данных?
Вам нужен фильтр по максимальному значению индекса:
rng = pd.date_range('2018-11-25', periods=10)
df1 = pd.DataFrame({'a': range(10)}, index=rng)
print (df1)
a
2018-11-25 0
2018-11-26 1
2018-11-27 2
2018-11-28 3
2018-11-29 4
2018-11-30 5
2018-12-01 6
2018-12-02 7
2018-12-03 8
2018-12-04 9
df1 = df1.loc[:'2018-11-30']
print (df1)
a
2018-11-25 0
2018-11-26 1
2018-11-27 2
2018-11-28 3
2018-11-29 4
2018-11-30 5
Или:
df1 = df1.loc[df1.index <= '2018-11-30']
print (df1)
a
2018-11-25 0
2018-11-26 1
2018-11-27 2
2018-11-28 3
2018-11-29 4
2018-11-30 5
Как выглядит ваш код?