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

使用Pandas读写CSV时如何保持datetime64[ns]数据类型不变?

解决Pandas读写CSV时datetime类型变为object的问题

这个问题我碰到过好多次了!其实核心原因很简单:CSV是纯文本格式,没办法直接保留datetime64[ns]这种结构化数据类型,所以保存时Pandas会自动把datetime列转成字符串格式,读取回来后默认就成了object类型。这和编码类型完全无关——编码只影响文本字符的正确读写,不会改变数据类型的解析逻辑。

下面给你几个实用的解决办法,按推荐程度排序:

1. 读取时直接指定解析日期列

在pd.read_csv()里用parse_dates参数指定要解析的列名,Pandas会自动把这些列转成datetime64[ns]类型:

# 写入时可以加date_format确保日期格式统一(可选但推荐)
df.to_csv(fileName, date_format='%Y-%m-%d %H:%M:%S')

# 读取时指定parse_dates参数
DF = pd.read_csv(fileName, sep=',', parse_dates=['TimeSeries'])
# 此时DF.TimeSeries的dtype就是datetime64[ns]了

加上date_format是为了让写入的日期格式更规范,避免读取时因格式不统一出现解析失败的情况。

2. 读取后手动转换日期列

如果已经读取了数据,也可以用pd.to_datetime()手动转换目标列:

DF = pd.read_csv(fileName, sep=',')
# 转换TimeSeries列为datetime类型,还可以处理异常格式
DF['TimeSeries'] = pd.to_datetime(DF['TimeSeries'], errors='coerce')

这种方法适合临时处理已读入的DataFrame,errors='coerce'参数能把无效的日期格式转成NaT(缺失值),避免程序报错。

3. 用二进制格式替代CSV(进阶方案)

如果需要频繁读写且要严格保留所有数据类型,推荐用Feather或Parquet这类二进制格式,它们可以直接保留Pandas的所有数据类型,包括datetime:

# 写入Feather格式
df.to_feather(fileName.replace('.csv', '.feather'))
# 读取Feather格式
DF = pd.read_feather(fileName.replace('.csv', '.feather'))
# 此时DF.TimeSeries的dtype依然是datetime64[ns]

这种方法读写效率更高,还能节省存储空间,但需要确保读取方也支持这些格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:36