Панды снижают частоту дискретизации больше временных интервалов?

Я выполняю повторную выборку данных, и мне было интересно, почему повторная выборка 1-минутных данных в 5-минутные данные создает БОЛЬШЕ временных интервалов, чем мой исходный набор данных? Кроме того, почему t передискретизируется до 11 декабря 2018 г. (на 11 дней дольше!), чем исходный набор данных?

1-минутные данные:

результат пересчета на 5-минутные интервалы:

Вот как я делаю повторную выборку:

df1.loc[:,'qKfz_gesamt'].resample('5min').mean()

Как выглядит ваш код?

jezrael 14.12.2020 10:59

Если проверить df1['qKfz_gesamt'].resample('5min').mean() против df1['qKfz_gesamt'].resample('5min').mean().dropna(), получится одинаковая длина?

jezrael 14.12.2020 11:01

Я думаю, проблема в том, что resample создают последовательные значения, и если они не существуют в оригинале, добавляются NaN, поэтому возможные выходные данные имеют больше значений.

jezrael 14.12.2020 11:03

Длина меньше, но начало и конец все еще «длиннее», чем исходные данные...

N.Foe 14.12.2020 11:05
beginning and ends are still "longer" - можно подробнее?
jezrael 14.12.2020 11:11

1-минутные данные идут до 30.11.2018 и передискретизируются 5-минутные данные до 11.12.2018 (+ 11 дней!). Откуда могли взяться те дни!?!

N.Foe 14.12.2020 11:14

Может быть, данные находятся в другом месте, что такое исходные данные print (df1['qKfz_gesamt'].index.max())?

jezrael 14.12.2020 11:15

И возможно несколько месяцев меняются местами с днями в datetime? Итак, 12-11-2018 разбирается как декабрь, а должен быть ноябрь?

jezrael 14.12.2020 11:16

Я думаю, что парсинг дат работает нормально. Если я делаю print (df1['qKfz_gesamt'].index.max()), это продолжается до 2018-12-11, поэтому, я думаю, мне нужно вручную выбрать диапазон дат, а затем выполнить повторную выборку?

N.Foe 14.12.2020 11:21

нужно отфильтровать дату и время по максимальному, например df1 = df1.loc[:'2018-11-30', :]?

jezrael 14.12.2020 11:22

да...похоже! Большое спасибо за Вашу помощь :)

N.Foe 14.12.2020 11:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
11
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне было интересно, почему повторная выборка 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

Другие вопросы по теме