You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas未识别datetime类型且转换报错的技术问题

解决Pandas中datetime类型未自动识别及转换失败问题

错误原因分析

你遇到的AttributeError: 'DataFrame' object has no attribute 'to_datetime',核心原因是**to_datetime是Pandas的顶层模块函数(归属pd),并非DataFrame对象的内置方法**,不能直接用DataFrame实例调用。同时Parquet文件读取时未自动识别datetime类型,导致目标字段 dtype 为object。

解决方案

方案1:读取Parquet时直接识别datetime类型(推荐)

读取文件时通过参数指定字段类型,让Pandas自动将目标字段识别为datetime类型,避免后续转换:

import pandas as pd

# 方法A:显式指定字段数据类型
rides = pd.read_parquet('../data/raw/rides_2022-01.parquet', dtype={'pickup_datetime': 'datetime64[ns]'})

# 方法B:利用parse_dates参数(需pyarrow引擎支持)
rides = pd.read_parquet('../data/raw/rides_2022-01.parquet', parse_dates=['pickup_datetime'], engine='pyarrow')

方案2:读取后正确执行datetime类型转换

如果已经完成文件读取,使用顶层函数pd.to_datetime()完成类型转换,同时保留时分秒信息:

import pandas as pd

rides = pd.read_parquet('../data/raw/rides_2022-01.parquet')
rides = rides[['pickup_datetime', 'PULocationID']]

rides.rename(columns={
    'tpep_pickup_datetime': 'pickup_datetime',
    'PULocationID': 'pickup_location_id',
}, inplace=True)

# 正确转换:调用pd.to_datetime()并赋值回原字段
rides['pickup_datetime'] = pd.to_datetime(rides['pickup_datetime'])

# 验证转换结果
print(rides['pickup_datetime'].dtype)  # 输出应为 datetime64[ns]
rides['pickup_datetime'].describe(include='all')

补充说明

  • 若日期格式特殊,可通过format参数指定解析规则(如format='%Y-%m-%d %H:%M:%S'),Pandas能自动识别常规格式时可省略该参数;
  • datetime64[ns]类型默认保留时分秒及更精细的时间单位,完全满足你的需求;
  • 若Parquet文件中目标字段原本存储为字符串格式,必须通过pd.to_datetime()转换才能转为datetime类型。

内容的提问来源于stack exchange,提问作者jdog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:05:26