为了账号安全,请及时绑定邮箱和手机立即绑定

从 Timedelta 和 NaN 数组中获取浮点数

从 Timedelta 和 NaN 数组中获取浮点数

拉风的咖菲猫 2021-06-18 17:09:27
我有一个简单的问题,给我带来了很多麻烦:我有一个大的 2D 数组,它是datetime.Timedelta对象和的混合np.nan,简化如下:tdarray = np.array([dt.timedelta(days=5), np.nan])现在我想从 timedelta 对象中获取天数和浮点数/整数,同时保持np.nan原样,即结果应该是np.array([ 5., nan]).从 timedelta 对象中获取天数很容易.days,并应用数组应该使用的函数,例如,np.fromiter然后重新整形。但是如何捕获尝试从 NaN 获取天数时发生的错误?我尝试屏蔽,但这也失败了 AttributeErrorMaskedArray没有属性days。有什么简单的解决办法吗?
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

利用np.nan唯一不等于自身的对象这一事实。请注意,如果您的数组包含其他对象,则它们应该定义相等运算符,否则会引发错误。


tdarray = np.asarray([dt.timedelta(days=5), np.nan])

mask = tdarray == tdarray  # This gives array([True, False])

tdarray[mask] = [x.days for x in tdarray[mask]]

# Optionally cast to float

tdarray = tdarray.astype(np.float64)

或者你可以简单地重建阵列


tdarray = np.asarray([x.days if x == x else x for x in tdarray],

                     dtype=np.float64)

如果tdarray是 ND 数组 (N > 1) 那么


shape = tdarray.shape

tdarray = np.asarray([x.days if x == x else x 

                      for x in tdarray.ravel()],

                      dtype=np.float64).reshape(shape)


查看完整回答
反对 回复 2021-06-22
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信