如何将pandas列转换为datetime

问题描述 投票:0回答:2

我有一个数据帧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
python pandas performance datetime series
2个回答
2
投票

指定formatinfer_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')

0
投票

试试这段代码:

df['date'] = pd.to_datetime(df['date'],infer_datetime_format=True)

从pandas官方文档来看,传递infer_datetime_format = True通常可以加速解析,如果它不是完全符合ISO8601格式,而是以你正在传递的常规格式

© www.soinside.com 2019 - 2024. All rights reserved.