在panda中传递给datetime64数据类型的单元有什么作用吗?
请考虑以下代码:
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
1条答案
按热度按时间lf5gs5x21#
首先是:Pandas 版本的
datetime64
类型仅支持时区。特别是,当您尝试Pandas系列中的datetime64
变体时,它将仅支持as
(阿秒),fs
(飞秒),ps
(皮秒)和ns
(纳秒)分辨率,任何精度较低的都将替换为datetime64[ns]
。datetime64[<res>, <tz>]
变体仅接受s
(秒)、ms
(毫秒)、us
(微秒)和ns
分辨率。请不要将这些分辨率与numpy
datetime64 type相混淆。对于Pandas和Numpy,两个字母的缩写决定了用于记录时间戳的 * 分辨率 *,并且由于类型总是以64位存储,它决定了可以存储的值的范围。它不会改变类型占用的内存大小!
从numpy
datetime64
* 日期时间单位 * 文件:日期时间始终以1970-01- 01 T00:00的历元存储。这意味着支持的日期始终是围绕历元的对称间隔,在下表中称为“时间跨度”。
跨度的长度是64位整数乘以日期或单位长度的范围。例如,'W'(周)的时间跨度正好是'D'(天)的时间跨度的7倍,'D'(天)的时间跨度正好是'h'(小时)的时间跨度的24倍。
您的实验不会显示内存使用方面的任何差异,因为内存量没有变化,只有分辨率发生了变化。
因为Pandas * Package 了 * numpy
datetime64
类型,并且你实际上不能用datetime64[ns]
以外的任何东西创建一个系列;例如,DateTimeIndex
dtype
参数被记录为接受 *numpy.dtype
或DatetimeTZDtype
或str
,默认为None
*,但是对于numpy.dtype
存在附加限制:请注意,唯一允许的NumPy dtype是“datetime 64 [ns]”。
所以要演示不同单位的效果是什么,你就得直接使用
numpy
类型:注意:Pandas的 * 文档 * 只讨论了
datetime64
类型的ns
分辨率,从GitHub上的各种问题来看,虽然一些代码库支持其他(更好的)分辨率,但这种支持并不可靠,也没有得到库中所有代码的广泛支持。