1. ホーム
  2. パイソン

[pandas] DatetimeIndexを日付文字列のシリーズに変換する

2022-02-28 03:53:36
<パス

エンカウンター

DatetimeIndexを日付文字列でSeries型に変換する必要がある。

例えば、以下のようなDatetimeIndexがあるとします。

print dti
DatetimeIndex(['2015-09-21 10:30:00', '2015-09-21 11:30:00',
               '2015-09-21 14:00:00', '2015-09-21 15:00:00',
               '2015-09-22 10:30:00', '2015-09-22 11:30:00',
               '2015-09-22 14:00:00', '2015-09-22 15:00:00'],
              dtype='datetime64[ns]', freq=None, tz=None)

これで、このデータ内では2015-09-21, 2015-09-22のような日付情報だけが必要となり、時間情報は省略できるようになりました。


解決策

Indexの型が通常のpandas.core.index.Indexであれば、問題はうまく解決します。

df.index.str.split(' ').str[0]

しかし、DatetimeIndexでstrオブジェクトを使おうとすると、例外が発生します。

AttributeError: Can only use .str accessor with string values (i.e. inferred_typ
e is 'string', 'unicode' or 'mixed')

APIを見たところ、以下のコードのように、まずDatetimeIndexをdatetime型の配列に変換し、その配列を操作してnumpy.ndarrayを取得し、最後にその配列をSeriesに変換すればいいことがわかりました。

pydate_array = dti.to_pydatetime()
date_only_array = np.vectorize(lambda s: s.strftime('%Y-%m-%d'))(pydate_array )
date_only_series = pd.Series(date_only_array)

最終的には、日付だけを含むSeriesになります。

print date_only_series 

0 2015-09-21
1 2015-09-21
2 2015-09-21
3 2015-09-21
4 2015-09-22
5 2015-09-22
6 2015-09-22
7 2015-09-22
dtype: object