Pandas中datetime列调用describe()为何返回数值型统计结果?
关于pandas中datetime类型执行describe()的疑问
我在使用pandas进行数据分析时,拥有一个datetime列,并执行了如下代码:
import pandas as pd import numpy as np s = pd.Series([np.datetime64("2000-01-01"), np.datetime64("2010-01-01"), np.datetime64("2010-01-01")]) print('--------------------') print(s) print('--------------------') print(s.dtype) print('--------------------') print(s.describe())
得到的输出如下:
-------------------- 0 2000-01-01 1 2010-01-01 2 2010-01-01 dtype: datetime64[ns] -------------------- datetime64[ns] -------------------- count 3 mean 2006-09-01 08:00:00 min 2000-01-01 00:00:00 25% 2004-12-31 12:00:00 50% 2010-01-01 00:00:00 75% 2010-01-01 00:00:00 max 2010-01-01 00:00:00 dtype: object
查阅pandas 2.0.0版本文档得知,上述统计结果的格式应为数值型数据的输出,而object、category、timestamp等非数值型数据的统计结果不同。我疑惑:datetime类型是否在describe()中被当作数值型处理?
实际上,pandas对datetime64类型执行describe()时,确实采用了类似数值型的统计逻辑,但本质是基于datetime的时间戳数值计算后再转回datetime格式展示。
datetime64类型在pandas内部是以int64格式存储的时间戳(比如纳秒级整数),计算均值、分位数这类统计量时,pandas会先把datetime转换为对应的时间戳数值完成数值计算,再将结果转回datetime格式呈现,这就导致输出的统计项(count、mean、min、25%、50%、75%、max)和数值型数据的describe()输出结构完全一致。
而object、category这类类型本身没有可直接计算的数值逻辑,所以describe()会输出unique、top、freq这类不同的统计项,和datetime的处理逻辑完全不同。
内容的提问来源于stack exchange,提问作者winter
相关产品推荐
相关产品推荐

