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)
你可以采取的手段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)
我用的是纪元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)
您可以使用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)
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |