#python #pandas
#python #панды
Вопрос:
У меня есть dataframe, проиндексированный по datetime. Я пытаюсь создать какой-то фильтр, который предоставляет только кадры, содержащие определенное время.
Так, например, все кадры, содержащие «09:30»
df.dtypes
open float64
high float64
low float64
close float64
volume int64
returns float64
returns_final int64
dtype: object
Я могу сделать это на основе начала фрейма, но я не могу понять, можем ли мы использовать фильтры подстановочного типа.
df.loc['2020'].head(5)
open high low close volume returns returns_final
Datetime
2020-07-06 09:30:00 255.337982 261.950012 253.208786 261.421997 6592145 -6.084015 1
2020-07-06 11:00:00 261.526001 268.399994 261.239990 266.275452 4955678 -4.749451 1
2020-07-06 12:30:00 266.269043 266.989990 264.200012 265.191986 2002640 1.077057 -1
2020-07-06 14:00:00 265.185455 269.558014 261.597992 268.513763 3303263 -3.328308 1
2020-07-06 15:30:00 268.528015 275.558014 268.096008 274.200012 2583149 -5.671997 1
2020-07-07 09:30:00 281.002014 285.641998 267.341980 277.621979 10130111 3.380035 -1
2020-07-07 11:00:00 278.000000 284.600006 276.536011 278.123718 4221461 -0.123718 1
2020-07-07 12:30:00 278.000000 282.000000 277.399994 280.131012 2394459 -2.131012 1
Я пытаюсь найти что-то в этом роде
df.loc['*09:30*']
Думаю, мне, возможно, придется переиндексировать это или что-то в этом роде
Любой ввод будет оценен
Комментарии:
1. Думаю, я понял это. df.filter(like= ’09:30′, axis= 0) Есть ли лучший способ?
Ответ №1:
Вы можете использовать это:
df[df.index.strftime('%H:%M:%S') == '09:30:00']
Вывод:
open high low close volume returns return_final
Datetime
2020-07-06 09:30:00 255.337982 261.950012 253.208786 261.421997 6592145 -6.084015 1
2020-07-07 09:30:00 281.002014 285.641998 267.341980 277.621979 10130111 3.380035 -1
Для нескольких раз в день:
df[df.index.strftime('%H:%M:%S').isin(['09:30:00','11:00:00'])]
Вы можете использовать filter, как вы делаете с регулярным выражением:
df.filter(regex='09:30|11:00', axis=0)
Вывод:
open high low close volume returns return_final
Datetime
2020-07-06 09:30:00 255.337982 261.950012 253.208786 261.421997 6592145 -6.084015 1.000000 NaN NaN
2020-07-06 11:00:00 261.526001 268.399994 261.239990 266.275452 4955678 -4.749451 1.000000 NaN NaN
2020-07-07 09:30:00 281.002014 285.641998 267.341980 277.621979 10130111 3.380035 -1.0 NaN
2020-07-07 11:00:00 278.000000 284.600006 276.536011 278.123718 4221461 -0.123718 1.000000 NaN NaN
Комментарии:
1. Знаете ли вы, как я могу добавить к этому несколько раз? df[df.index.strftime(‘%H:%M:%S’) == ’09:30:00’amp;’11:00:00′] ??
2. Используйте isin со списком строк
Ответ №2:
Похоже, это работает.
df.filter(like='09:30', axis=0)
open high low close volume returns returns_final
Datetime
2020-07-06 09:30:00 255.337982 261.950012 253.208786 261.421997 6592145 -6.084015 1
2020-07-07 09:30:00 281.002014 285.641998 267.341980 277.621979 10130111 3.380035 -1
2020-07-08 09:30:00 281.000000 283.399994 277.662018 278.865784 4698944 2.134216 -1
2020-07-09 09:30:00 279.398010 281.500000 271.919983 272.015991 4562064 7.382019 -1
2020-07-10 09:30:00 278.220367 283.799988 275.202026 283.506012 4274774 -5.285645 1