计算python datetime的平均值

Nic*_*ick 5 datetime mean python-3.x python-datetime pandas

我有一个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)
Run Code Online (Sandbox Code Playgroud)

我想计算该属性的均值.运行mean()会导致错误:

TypeError:此dtype不允许减少操作'mean'

我也试过别处提出的解决方案.它不起作用运行那里提出的功能的原因

OverflowError:Python int太大而无法转换为C long

你会建议什么?上述数据帧的结果应相当于

datetime.datetime(2014, 7, 12).
Run Code Online (Sandbox Code Playgroud)

piR*_*red 5

你可以采取的手段Timedelta.因此找到最小值并从系列中减去它以得到一系列Timedelta.然后取平均值并将其添加回最小值.

dob = df_test.DOB
m = dob.min()
(m + (dob - m).mean()).to_pydatetime()

datetime.datetime(2014, 7, 12, 0, 0)
Run Code Online (Sandbox Code Playgroud)

一条线

df_test.DOB.pipe(lambda d: (lambda m: m + (d - m).mean())(d.min())).to_pydatetime()
Run Code Online (Sandbox Code Playgroud)

@ALollz点

我用的是纪元pd.Timestamp(0)而不是min

df_test.DOB.pipe(lambda d: (lambda m: m + (d - m).mean())(pd.Timestamp(0))).to_pydatetime()
Run Code Online (Sandbox Code Playgroud)


Sco*_*ton 5

您可以使用astypenp.int64 转换时代时间,并使用转换回datetime pd.to_datetime

pd.to_datetime(df_test.DOB.dropna().astype(np.int64).mean())
Run Code Online (Sandbox Code Playgroud)

输出:

Timestamp('2014-07-12 00:00:00')
Run Code Online (Sandbox Code Playgroud)