以下の短いスクリプトはDukascopyウェブサイトからデータを収集するのにfindatapyを使用しています。このパッケージはPandasを使用するため、Pandasを個別にインポートする必要はありません。Python:Pandasのデータフレームから特定の日付を選択
from findatapy.market import Market, MarketDataRequest, MarketDataGenerator
market = Market(market_data_generator=MarketDataGenerator())
md_request = MarketDataRequest(start_date='08 Feb 2017', finish_date='09 Feb 2017', category='fx', fields=['bid', 'ask'], freq='tick', data_source='dukascopy', tickers=['EURUSD'])
df = market.fetch_market(md_request)
#Group everything by an hourly frequency.
df=df.groupby(pd.TimeGrouper('1H')).head(1)
#Deleting the milliseconds from the Dateframe
df.index =df.index.map(lambda t: t.strftime('%Y-%m-%d %H:%M:%S'))
#Computing Average between columns 1 and 2, and storing it in a new one.
df['Avg'] = (df['EURUSD.bid'] + df['EURUSD.ask'])/2
結果は次のようになります。この時点までは
、すべてが正常に動作しますが、私は、このデータフレームから特定の時間を抽出する必要があります。特定の時間(10:00:00 AM)にすべての値(入札、尋ねる、平均...またはそのうちの1つ)を選択したいと思います。
match_timestamp = "10:00:00"
df.loc[(df.index.strftime("%H:%M:%S") == match_timestamp)]
しかし、結果はというエラーメッセージです::他の
postsを見て
は、私はこのような何かを行うことができると思った
AttributeError: 'Index' object has no attribute 'strftime'
私もdf.indexを実行することはできません.hour、それは、dtypeが 'Object'であることを前に、私がミリ秒(dtypeはdatetime64 [ns]まで)を削除する行の前で動作していました。 strftimeを使うためにこのフォーマットを逆にする必要があるように見えます。
お手伝いできますか?
私はミリ秒を取り除くことができ、データフレームの操作を通して同じdtypeにとどまることができるので、私はこれが好きでした。私はdf.loc [(df.index.strftime( "%H:%M:%S")== "10:00:00")]を使用することもできます。ありがとうございました! :) –
@AquilesPáez問題はありません。また、大規模なセットでは、resample vs groupbyを使って約10%のスピードアップが得られます –