11

考えますDateTimeIndex dates

dates = pd.date_range('2016-01-29', periods=4, freq='BM')
dates

DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29'],
              dtype='datetime64[ns]', freq='BM')

オブジェクトに付属する周波数でインデックスを 1 期間延長したい。


私が期待する

pd.date_range('2016-01-29', periods=5, freq='BM')

DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29',
               '2016-05-31'],
              dtype='datetime64[ns]', freq='BM')

私はもう試した

dates.append(dates[[-1]] + pd.offsets.BusinessMonthEnd())

でも

  • の頻度を使用するために一般化されていませんdates
  • パフォーマンスの警告が表示される

    PerformanceWarning: ベクトル化されていない DateOffset が Series または DatetimeIndex に適用されています

4

5 に答える 5

6

pandas==1.1.1 +1 の回答

これをフォローアップするには、pandas==1.1.1これが最善の解決策であることがわかりました。

dates.union(pd.date_range(dates[-1] + dates.freq, periods=1, freq=dates.freq))

n を使用した一般化された答え

n=3
dates.union(pd.date_range(dates[-1] + dates.freq, periods=n, freq=dates.freq))

クレジット

@alberto-garcia-raboso の回答と @ballpointben のコメントを組み合わせて取得。

うまくいかなかったこと

  • Index以下は、ではなくにフォーマットされましたDateTimeIndexdates.union([dates[-1] + dates.freq])
  • またdates[-1] + 1、非推奨です。
于 2021-02-15T11:21:49.467 に答える
5

最善の解決策は次のとおりです。

import pandas as pd
dates = pd.date_range('2016-01-29', periods=4, freq='BM')
extended = dates.union(dates.shift(n)[-n:])

ここで、n は追加する期間の数です。を使用n=4すると、次のように日付範囲が拡張されます。

DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29',
               '2016-05-31', '2016-06-30', '2016-07-29', '2016-08-31'],
              dtype='datetime64[ns]', freq='BM')
于 2021-02-19T11:16:44.700 に答える