2

私は、1 か月間、1 日 24 時間、毎日、1 分ごとの外国為替価格のデータセットを持っています。ただし、外国為替市場は実際には日曜日の 17:00 から金曜日の 16:00 までしか開いていません。これらの時間の間のデータは、金曜日の夜に最後に記録された値で埋められます。このパディングを削除して、マーケット オープン データのみを残そうとしています。

私は何十もの行き止まりを下って行き、木のための木を完全に失いました。

指定された時間枠に従ってデータのサブセットを返すのは非常に簡単です。

import pandas as pd
df = pd.read_csv(tickdatafile,index_col='dtime',parse_dates=True)

# Return all rows for times between 12:00 and 16:00
df = df.between_time('12:00','16:00')

最初の 2 行は、csv ファイルからデータフレームを作成し、「dtime」列をインデックスとして割り当て、datetime オブジェクトとして解析します。3 行目は、曜日に関係なく、12:00 から 16:00 までのすべての行を返します。

シンプルな 1 行のソリューションは (疑似コード) のようになります。

df = df.between_customTimeRange('Sun 17:00','Fri 16:00')

しかし、明らかに、これは機能しません。

私が完全に見落としている単純なものはありますか?

編集: EKomarov と Alexander の回答を最初から最後まで次のソリューションにまとめました。

import pandas as pd
df = pd.read_csv(tickdatafile,index_col='dtime',parse_dates=True)

mask = df[ ( (   df.index.weekday == 6 ) & ( df.index.hour < 17 ) )# Sunday pre 17:00
         |   (   df.index.weekday == 5 )                           # All of Saturday
         | ( (   df.index.weekday == 4 )                           # Friday
           &                         (     ( df.index.hour >= 16 ) # Friday 16.00 onwards
                                     &  ~( ( df.index.hour == 16 )
                                         & ( df.index.minute == 0 )# Exclude 16.00 itself
                                         )
                                     )
           )
         ]

df = df[~df.index.isin(mask.index)] # return all data not in mask
df.to_csv(tradingdaysonly) 
4

2 に答える 2

2

これが可能な解決策です。

不要なタイムスタンプを破棄することで問題を軽減できます。これらの「間違った」タイムスタンプは、金曜日の 16:00 と日曜日の 17:00 の間です。

あなたが持っていると言う

data = pd.Series( np.random.randn(100), index = pd.date_range('2015-04-01', periods = 100, freq = '6h') )

「間違った」タイムスタンプを見つけてみましょう:

    paddedTimestamps = ( ( (data.index.dayofweek == 4) & (data.index.time > datetime.time(16,0)) ) | 
                           (data.index.dayofweek == 5) | 
                         ( (data.index.dayofweek == 6) & (data.index.time < datetime.time(17,0)) ) )

現在、paddedTimestamps には、タイムスタンプが「間違っている」整数位置ごとに True が含まれているため、それを反転してデータを照会します。

nonPaddedData = data[~paddedTimestamps]
于 2015-04-12T15:50:04.300 に答える