我有一个日期时间属性:
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: reduction operation 'mean' not allowed for this dtype
我也尝试了提出的解决方案elsewhere .它不起作用,因为运行那里建议的函数导致
OverflowError: Python int too large to convert to C long
你会提出什么建议?上述数据帧的结果应等价于
datetime.datetime(2014, 7, 12).
最佳答案
您可以取 Timedelta
的平均值。所以找到最小值并从系列中减去它以获得一系列 Timedelta
。然后取平均值并将其加回最小值。
dob = df_test.DOB
m = dob.min()
(m + (dob - m).mean()).to_pydatetime()
datetime.datetime(2014, 7, 12, 0, 0)
一条线
df_test.DOB.pipe(lambda d: (lambda m: m + (d - m).mean())(d.min())).to_pydatetime()
@ALollz point
我使用纪元
pd.Timestamp(0)
而不是 min
df_test.DOB.pipe(lambda d: (lambda m: m + (d - m).mean())(pd.Timestamp(0))).to_pydatetime()
关于python-3.x - 计算python日期时间的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50358564/