使用Pandas无法正确拆分日期时间列?求解决方案
问题分析与修复方案
核心问题
- 类型丢失导致时间提取失败:你将转换后的
datetime类型直接转为date对象(data['date'].dt.date),此时该列已不再是pandas的datetime64类型,而是Python原生date类型,无法通过dt.time提取时间信息,最终生成NaT。 - 潜在格式不匹配风险:若你的原始日期字符串实际是
日/月/年格式(比如12/10/2022是10月12日而非12月10日),指定的%m/%d/%Y格式会导致转换失败,errors='coerce'会将错误值转为NaT。
修复后的代码
import pandas as pd # 读取CSV数据 data = pd.read_csv('file_directory.csv') # 转换为datetime类型:注意格式匹配,若为日/月/年则改为'%d/%m/%Y %H:%M:%S.%f %z' data['datetime'] = pd.to_datetime(data['date'], errors='coerce', utc=True, format='%m/%d/%Y %H:%M:%S.%f %z') # 从完整datetime中提取日期和时间 data['date'] = data['datetime'].dt.date data['time'] = data['datetime'].dt.time # 可选:移除临时datetime列 data.drop('datetime', axis=1, inplace=True) # 查看转换结果 print(data[['date', 'time']].head())
额外提示
- 若仍出现
NaT,打印原始date列的前10行(print(data['date'].head(10))),检查是否存在格式不一致的异常值。 - 避免直接覆盖原
date列的datetime类型数据,保留完整时间戳是提取日期、时间的前提。
内容的提问来源于stack exchange,提问作者Megan van Blerk
相关产品推荐
相关产品推荐

