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

Pandas中datetime64数据类型的传入单位是否起作用?

Pandas中datetime64单位参数的实际作用

在Pandas中使用astype("datetime64[xxx]")转换字符串日期时,测试发现不同单位参数下,生成的Timestamp类型、时间值及内存占用均无差异,以下是该单位参数的实际作用说明:

测试代码

import pandas as pd 
v1 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64"})
v2 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[ns]"})
v3 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[ms]"})
v4 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[s]"})
v5 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[h]"})
v6 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[D]"})
v7 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[M]"})
v8 = pd.DataFrame({"Date":["2020-01-01"]*1000}).astype({"Date":"datetime64[Y]"})

for v in [v1,v2,v3,v4,v5,v6,v7,v8]:
    x = v.iloc[0,0]
    print(x, type(x), x.to_datetime64(), v.memory_usage()["Date"])

测试输出

2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000
2020-01-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 2020-01-01T00:00:00.000000000 8000

单位参数的实际作用

  • 仅对数值型时间戳生效:当输入是整数/数值形式的时间戳时,单位参数会决定数值对应的时间基准。比如数值1609459200,用astype("datetime64[s]")会解析为2020-01-01,而用astype("datetime64[ms]")则会解析为1970-01-20 03:14:19.200。
  • 字符串日期输入会忽略单位:Pandas处理字符串日期时,会直接解析为内部统一以纳秒精度存储的Timestamp对象,此时指定的datetime64单位会被覆盖,所以测试中所有情况的结果一致。
  • numpy层面的差异:如果直接用numpy创建datetime64数组,不同单位会影响存储精度和内存占用(比如datetime64[D]比datetime64[ns]占用内存少很多),但Pandas会将这类numpy数组转换为Timestamp对象,统一为纳秒精度。
  • 与pd.to_datetime()的unit参数一致:在pd.to_datetime()中指定unit参数,作用和astype里的单位参数相同,都是用来解析数值型时间戳的基准单位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:01:20