大きなパンダを飼っていますDataFrame
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 3425100 entries, 2011-12-01 00:00:00 to 2011-12-31 23:59:59
Data columns:
sig_qual 3425100 non-null values
heave 3425100 non-null values
north 3425099 non-null values
west 3425097 non-null values
dtypes: float64(4)
そのサブセットをDataFrame
使用して選択し、.ix[start_datetime:end_datetime]
これをpeakdetect関数に渡します。この関数は、局所的な最大値と最小値のインデックスと値を2つの別々のリストに返します。最大値のインデックス位置を抽出し、これを使用してDataFrame.index
パンダのタイムスタンプのリストを取得します。
次に、TimeStamps のリストを渡して、大きな DataFrame の関連するサブセットを抽出しようとします.ix[]
が、常に空の を返すようですDataFrame
。タイムスタンプのリストをループして関連する行を取得できますが、これは長いプロセスであり、ドキュメントに従って値のリストを受け入れる必要があるDataFrame
と思いましたか?
(Pandas 0.7 の例では of を使用しているように見えますが)ix[]
numpy.ndarray
numpy.datetime64
更新: DataFrame の小さな 8 秒のサブセットが以下で選択されています。# 行は値の一部を示しています。
y = raw_disp['heave'].ix[datetime(2011,12,30,0,0,0):datetime(2011,12,30,0,0,8)]
#csv representation of y time-series
2011-12-30 00:00:00,-310.0
2011-12-30 00:00:01,-238.0
2011-12-30 00:00:01.500000,-114.0
2011-12-30 00:00:02.500000,60.0
2011-12-30 00:00:03,185.0
2011-12-30 00:00:04,259.0
2011-12-30 00:00:04.500000,231.0
2011-12-30 00:00:05.500000,139.0
2011-12-30 00:00:06.500000,55.0
2011-12-30 00:00:07,-49.0
2011-12-30 00:00:08,-144.0
index = y.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-12-30 00:00:00, ..., 2011-12-30 00:00:08]
Length: 11, Freq: None, Timezone: None
#_max returned from the peakdetect function, one local maxima for this 8 seconds period
_max = [[5, 259.0]]
indexes = [x[0] for x in _max]
#[5]
timestamps = [index[z] for z in indexes]
#[<Timestamp: 2011-12-30 00:00:04>]
print raw_disp.ix[timestamps]
#Empty DataFrame
#Columns: array([sig_qual, heave, north, west, extrema], dtype=object)
#Index: <class 'pandas.tseries.index.DatetimeIndex'>
#Length: 0, Freq: None, Timezone: None
for timestamp in timestamps:
print raw_disp.ix[timestamp]
#sig_qual 0
#heave 259
#north 27
#west 132
#extrema 0
#Name: 2011-12-30 00:00:04
更新 2:データが csv から読み込まれると、タイムスタンプのインデックス列が文字列のように見えるオブジェクトの numpy 配列として格納されるため、実際に機能する gist
を作成しました。<class 'pandas.tseries.index.DatetimeIndex'>
インデックスが型で各要素が型である自分のコードとは異なり、<class 'pandas.lib.Timestamp'>
のリストを渡すと個々のタイムスタンプを渡すのと同じように機能すると思いましたpandas.lib.Timestamp
が、これはバグと見なされますか?
文字列のリストとしてインデックスを使用してオリジナルを作成するDataFrame
と、文字列のリストを使用したクエリは正常に機能します。ただし、DataFrame のバイト サイズは大幅に増加します。
更新 3: エラーは非常に大きな DataFrame でのみ発生するようです。さまざまなサイズの DataFrame でコードを再実行しました (以下のコメントの詳細)。270 万レコードを超える DataFrame で発生するようです。TimeStamps ではなく文字列を使用すると、問題は解決しますが、メモリ使用量が増加します。
最新の github マスター (2012 年 9 月 18 日) で修正されました。ページの下部にある Wes からのコメントを参照してください。