我有一个datetime属性:
d = {
'DOB': pd.Series([
datetime.datetime(2014, 7, 9),
datetime.datetime(2014, 7, 15),
np.datetime64('NaT')
], index=['a', 'b', 'c'])
}
df_test = pd.DataFrame(d)
我想计算该属性的平均值。运行mean()会导致错误:
TypeError:此数据类型不允许约简运算“mean”
我还尝试了elsewhere的解决方案。它不工作,因为运行那里提出的函数会导致
溢出错误:Python int太大,无法转换为C long
你的建议是什么?上面的 Dataframe 的结果应该相当于
datetime.datetime(2014, 7, 12).
5条答案
按热度按时间nxagd54h1#
你可以取
Timedelta
的平均值。所以找到最小值,从序列中减去它,得到Timedelta
的序列。然后取平均值,再把它加回最小值。单线
至@ALollz点
我使用的epoch为
pd.Timestamp(0)
,而不是min
nkoocmlb2#
您可以使用
astype
和np.int64转换纪元时间,并使用pd.to_datetime
转换回日期时间:输出:
rsl1atfo3#
如果你愿意的话,你可以使用
unix
时间。这被定义为从1970-01-01
开始的总秒数(例如)。这样,你所有的时间都是简单的浮点数,所以很容易在列上做简单的数学运算。vsmadaxz4#
日期时间数学支持一些标准操作:
因此,你可以编写一个函数,给定两个日期时间,将较小的日期时间减去较大的日期时间,并将差值的一半加到较小的日期时间。将此函数应用于 Dataframe ,然后shazam!
z5btuh9x5#
当pandas=0.25时,可以计算日期时间序列的平均值。
但是,请注意,对pandas dataframe应用mean当前会忽略具有datetime序列的列。