回答:
最も簡単な方法はto_datetime
次のとおりです。
df['col'] = pd.to_datetime(df['col'])
それはまたdayfirst
ヨーロッパの時代に対する議論を提供します(しかしこれは厳密ではないことに注意してください)。
ここでそれは動作しています:
In [11]: pd.to_datetime(pd.Series(['05/23/2005']))
Out[11]:
0 2005-05-23 00:00:00
dtype: datetime64[ns]
In [12]: pd.to_datetime(pd.Series(['05/23/2005']), format="%m/%d/%Y")
Out[12]:
0 2005-05-23
dtype: datetime64[ns]
DatetimeIndex(df['col']).to_pydatetime()
はずです。
SettingWithCopyWarning
十分な資料が得られる
日付列が「2017-01-01」形式の文字列の場合、pandas astypeを使用して日付時刻に変換できます。
df['date'] = df['date'].astype('datetime64[ns]')
または、ナノ秒ではなく日の精度が必要な場合は、datetime64 [D]を使用します
print(type(df_launath['date'].iloc[0]))
収量
<class 'pandas._libs.tslib.Timestamp'>
pandas.to_datetimeを使用する場合と同じ
'%Y-%m-%d'のような他の形式でも試すことができますが、少なくともこれでうまくいきます。
トリッキーなフォーマットを指定したい場合は、以下を使用できます。
df['date_col'] = pd.to_datetime(df['date_col'], format='%d/%m/%Y')
format
ここの詳細:
日付の形式が混在している場合は、設定infer_datetime_format=True
を忘れずに行ってください
df['date'] = pd.to_datetime(df['date'], infer_datetime_format=True)
ソース:pd.to_datetime
または、カスタマイズされたアプローチが必要な場合:
def autoconvert_datetime(value):
formats = ['%m/%d/%Y', '%m-%d-%y'] # formats to try
result_format = '%d-%m-%Y' # output format
for dt_format in formats:
try:
dt_obj = datetime.strptime(value, dt_format)
return dt_obj.strftime(result_format)
except Exception as e: # throws exception when format doesn't match
pass
return value # let it be if it doesn't match
df['date'] = df['date'].apply(autoconvert_datetime)