【问题标题】:How to convert a pandas column to datetime如何将熊猫列转换为日期时间
【发布时间】:2019-02-17 05:17:59
【问题描述】:

我有一个数据框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

【问题讨论】:

  • 代码看起来不错。我通常对大约 1000 万条记录执行相同的操作,并且效果很好。
  • 为了提高效率,请使用 pd.to_datetime 中的格式参数。而且,“年份超出范围”可能是由于数据不正确。

标签: python pandas performance datetime series


【解决方案1】:

指定 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

提前告诉 Pandas 您的期望通常是提高性能的好方法。因此,如果您从输入文件中读取,这个想法也适用于 pd.read_csv

您的错误可能是由于数据不佳所致。如果您希望为不可转换的值返回NaT,请指定errors='coerce'

pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')

【讨论】:

    【解决方案2】:

    试试这个代码:

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

    从 pandas 官方文档中,如果它不是 ISO8601 格式,而是像您传递的那样是常规格式,传递 infer_datetime_format=True 通常可以加快解析速度

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多