我有一个数据帧df
df
date
0 05/01/2017
1 04/01/2017
2 08/01/2017
3 03/01/2017
4 10/01/2017
我想将date
列从str
转换为datetime
我做的如下
df['date'] = pd.to_datetime(df['date'])
但如果我尝试,它需要无限的时间
pd.to_datetime(df['date'][0])
我收到以下错误
year is out of range
指定format
或infer_datetime_format
以获得巨大的性能提升:
df = pd.concat([df]*10000)
%timeit pd.to_datetime(df['date']) # 12.5 s per loop
%timeit pd.to_datetime(df['date'], format='%m/%d/%Y') # 252 ms per loop
%timeit pd.to_datetime(df['date'], infer_datetime_format=True) # 228 ms per loop
提前告诉大熊猫你期望的通常是改善表现的好方法。因此,如果您从输入文件中读取,这个想法也适用于pd.read_csv
。
您的错误可能是由于数据不佳造成的。如果您希望返回NaT
作为不可转换的值,请指定errors='coerce'
:
pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')
试试这段代码:
df['date'] = pd.to_datetime(df['date'],infer_datetime_format=True)
从pandas官方文档来看,传递infer_datetime_format = True通常可以加速解析,如果它不是完全符合ISO8601格式,而是以你正在传递的常规格式