#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