17

DataFrame インデックスのすべての行を調べて、特定の時間の間にないすべての行を削除しようとしています。

私は解決策を探していましたが、日付と時刻を分離するものはありません。時間範囲外の行を削除するだけです。

4

3 に答える 3

22

between_time関数を直接使用できます。

ts.between_time(datetime.time(18), datetime.time(9), include_start=False, include_end=False)

元の答え:

メソッドを使用できますindexer_between_time Index

たとえば、午前 9 時から午後 6 時まで ( inclusive ) の時間を含めるには:

ts.ix[ts.index.indexer_between_time(datetime.time(9), datetime.time(18))]

逆に、午後 6 時から午前 9 時までの時間を除外するには (排他的):

ts.ix[ts.index.indexer_between_time(datetime.time(18), datetime.time(9),
                                    include_start=False, include_end=False)]

注:indexer_between_timeの引数include_startinclude_endはデフォルトTrueで です。 に設定include_startするFalseと、時間部分が正確start_time(最初の引数)、この場合は午後 6 時である日時は含まれません。

例:

In [1]: rng = pd.date_range('1/1/2000', periods=24, freq='H')

In [2]: ts = pd.Series(pd.np.random.randn(len(rng)), index=rng)

In [3]: ts.ix[ts.index.indexer_between_time(datetime.time(10), datetime.time(14))] 
Out[3]: 
2000-01-01 10:00:00    1.312561
2000-01-01 11:00:00   -1.308502
2000-01-01 12:00:00   -0.515339
2000-01-01 13:00:00    1.536540
2000-01-01 14:00:00    0.108617

注: 同じ構文 ( を使用ix) が DataFrame に対して機能します。

In [4]: df = pd.DataFrame(ts)

In [5]: df.ix[df.index.indexer_between_time(datetime.time(10), datetime.time(14))]
Out[5]: 
                            0
2000-01-03 10:00:00  1.312561
2000-01-03 11:00:00 -1.308502
2000-01-03 12:00:00 -0.515339
2000-01-03 13:00:00  1.536540
2000-01-03 14:00:00  0.108617
于 2013-01-26T19:08:54.680 に答える