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
相关产品推荐
相关产品推荐

