Как мне запретить pandas dataframe.resample (‘T’) автоматически добавлять дополнительные индексы в dataframe?

#python #pandas #dataframe #datetimeindex

#python #pandas #dataframe #datetimeindex

Вопрос:

Я пытаюсь уменьшить выборку фрейма данных, который содержит поминутные данные, в 5-минутные ячейки. Вот мой текущий код:

 df = pd.read_csv('stockPrices/closingPrices-apr3.csv',index_col='date',parse_dates=True)
df['close'] = df['close'].shift()
df5min = df.resample('5T').last()
print(df5min.tail())
  

Ссылка на файл CSV находится здесь:
https://drive.google.com/file/d/1uvkUaJwrQNsmte5IQIsJ_g5GS8RjVd8B/view?usp=sharing

Вывод должен прекратиться в 2019-04-03 14:40:00, потому что последнее значение равно 14:48:00, а 5-минутный интервал с 14:45-14:49 невозможен. Однако я получаю следующие значения индекса datetime, которые не существуют в моем файле csv:

 2019-04-03 14:45:00  286.35
2019-04-03 14:50:00  286.52
2019-04-03 14:55:00  286.32
2019-04-03 15:00:00  286.45
2019-04-03 15:05:00  280.64
  

Единственное исправление, которое я могу найти на данный момент, — это использование следующего кода, но тогда все мои данные за предыдущие дни будут отключены в 14: 40:

 df5min = df.resample('5T').last().between_time(start_time='9:30',end_time='14:40')
  

Любая помощь по этому вопросу приветствуется.

Комментарии:

1. мне кажется, последнее значение было включено: 2019-04-03 15:08:00

2. Привет. Я пытаюсь понять, где вы нашли значение 15:08:00 (поскольку это решило бы мою проблему). Я проверил свой файл CSV, я вижу только значение 14: 48 во второй строке.

3. Вывод должен прекратиться в 2019-04-03 14:45:00 вместо этого?

4. Я бы хотел, чтобы последний индекс был равен 14:40 (представляющий значения 14; 40-14:44). Я организовал это так, чтобы самый первый индекс 9:30:00 содержал последнее значение индексов 9:30-9:34:00 или закрытие 5-минутной «свечи». Я использую это для быстрого сравнения данных между свечным графиком и моими лично собранными данными.

5. итак, для 2019-04-03 14:40:00 каким будет правильное число? для всех них они должны быть закрыты через 5 минут?

Ответ №1:

решение создаст строку, которая вам, вероятно, не нужна для 03.04.2018 15:05

 df = pd.read_csv('./closingPrices-apr3.csv', index_col='date',parse_dates=True)
df.sort_index(inplace = True)
df = df.shift(5)
df_5min = df.resample('5T').first()
  

Комментарии:

1. Спасибо за это исправление, я буду использовать его в настоящее время. Есть ли в методе .resample() ошибка, из-за которой нам нужен такой сложный обходной путь?

2. не уверен, что это была ошибка, я попробовал, и это не сделало того, что я думал, что это будет делать.

3. Я думаю, что ваше старое решение работало лучше. После 14:48:00 не должно быть никаких значений. Я получаю значения в 14:50 — 15:05 с шагом в 5 минут с вашими новыми решениями, ни одно из которых не отображается в csv

4. на самом деле ваш файл не отсортирован, они выглядят как отсортированные, но попробуйте отсортировать его самостоятельно. или попробуйте найти максимальное значение index. df[np.array(список (df.index)) == max(список(df.index))]

5. посмотрите на строки 13139, 3755,5630,15033, пустые значения и данные после 14:48:00