パンダの日時の日付を月末に変換する関数を作成しました。
import pandas
import numpy
import datetime
from pandas.tseries.offsets import Day, MonthEnd
def get_month_end(d):
month_end = d - Day() + MonthEnd()
if month_end.month == d.month:
return month_end # 31/March + MonthEnd() returns 30/April
else:
print "Something went wrong while converting dates to EOM: " + d + " was converted to " + month_end
raise
この関数はかなり遅いようですが、もっと速い代替手段があるかどうか疑問に思っていましたか? 遅いことに気付いた理由は、これを 50,000 の日付を持つデータフレーム列で実行しているためです。その関数を導入してから (日付を月末に変換する前)、コードがはるかに遅いことがわかります。
df = pandas.read_csv(inpath, na_values = nas, converters = {open_date: read_as_date})
df[open_date] = df[open_date].apply(get_month_end)
それが関連しているかどうかはわかりませんが、次のように日付を読んでいます。
def read_as_date(x):
return datetime.datetime.strptime(x, fmt)