サイトアイコン Amelt.net

python:pandasで日付(numpy.datetime64 フォーマット)を取得・変換する

Amelt

Amelt

This post is also available in: English-US (英語)

python のライブラリ pandasを使っての日付(numpy.datetime64 フォーマット)の取得・変換についてのメモです。
numpy.datetime64フォーマットから、年・月・日などを抽出する際に便利です。

numpyの空配列から作成したdatetime64をpandasを使って変換したい場合

空のnumpy配列(np.empty)から作成したnumpy.datetime64を、pandasを使って日付を取得・変換したいんだ!...という場合のサンプルコードです。
以下のコード中のpd.to_datetime()でpandasのTimestamp型になりますのでpandasのメソッドを適用することができます。詳細は以下のサイトを参考にしてみてください。
pandas.Timestamp — pandas 0.23.4 documentation

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np

date_df = np.empty(2, dtype='datetime64[ns]')
date_df[0] = np.datetime64('2016-09-29T00:00:00.000000000')
date_df[1] = np.datetime64('2016-09-28T00:00:00.000000000')
# Convert data by pandas
date_df = pd.to_datetime(date_df)

# print
print type(date_df) # <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
print type(date_df[0]) # <class 'pandas._libs.tslib.Timestamp'>
print date_df  # DatetimeIndex(['2016-09-29', '2016-09-28'], dtype='datetime64[ns]', freq=None)
print str(date_df[0].day) # 29
print str(date_df[0].month) # 9
print str(date_df[0].year) # 2016

numpyの空配列から作成したdatetime64をastypeを使って変換したい場合

空のnumpy配列(np.empty)から作成したnumpy.datetime64をastypeを使って日付を取得・変換したいんだ!...という場合のサンプルコードです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np

date_df = np.empty(2, dtype='datetime64[ns]')
date_df[0] = np.datetime64('2016-09-29T00:00:00.000000000')
date_df[1] = np.datetime64('2016-09-28T00:00:00.000000000')

# print
print type(date_df[0]) # <type 'numpy.datetime64'>
print date_df  # ['2016-09-29T00:00:00.000000000' '2016-09-28T00:00:00.000000000']
print date_df.astype('M8[D]') # ['2016-09-29' '2016-09-28' ]
print date_df.astype('M8[M]') # ['2016-09' '2016-09']
print date_df.astype('M8[Y]') # ['2016' '2016']

CSVの日付データからdatetime64をastypeを使って変換したい場合

サンプルで使っているCSVデータは、Yahoo Finance USの株価データです。
CSVの日付データからdatetime64をastypeを使って日付を取得・変換したいんだ!...という場合のサンプルコードです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd

# Read CSV
df = pd.read_csv("data/SMPLE.csv",index_col=0, parse_dates=True)
# Get index(date) values
date_df = df.index.get_values()
# print
print type(date_df[0]) # <type 'numpy.datetime64'>
print date_df  # ['2016-09-29T00:00:00.000000000' '2016-09-28T00:00:00.000000000']
print date_df.astype('M8[D]') # ['2016-09-29' '2016-09-28' ]
print date_df.astype('M8[M]') # ['2016-09' '2016-09']

Pythonについて学びたいという方は 世界最大級のオンライン学習サイトUdemy をおすすめします。