【问题标题】:How to modify elements in a numpy array?如何修改numpy数组中的元素?
【发布时间】:2018-04-20 16:21:11
【问题描述】:

这是我的代码:

a=np.arange('2017-01-01', '2017-01-09', dtype='datetime64[D]')

我得到以下输出:

array(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
       '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08'], dtype='datetime64[D]')

我想从每个元素中去掉年份。我怎样才能做到这一点?

【问题讨论】:

  • 这是什么意思?日期时间本质上是纪元时间戳,去掉年份没有任何意义。你为什么要这样做?
  • 这是怎么复制的?该链接询问在linspace 中使用日期。这里没有提及该功能。该链接是关于一系列日期的,但仅此而已。 stackoverflow.com/q/37964100

标签: python numpy


【解决方案1】:

Y 单位的日期是:

In [870]: a.astype('datetime64[Y]')
Out[870]: array(['2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017'], dtype='datetime64[Y]')

或从其余日期中减去第一个日期,得到timedelta64

In [875]: a-a[0]
Out[875]: array([0, 1, 2, 3, 4, 5, 6, 7], dtype='timedelta64[D]')

tolist 将日期数组转换为datetime 对象列表

In [888]: a.tolist()
Out[888]: 
[datetime.date(2017, 1, 1),
 datetime.date(2017, 1, 2),
 datetime.date(2017, 1, 3),
 datetime.date(2017, 1, 4),
 datetime.date(2017, 1, 5),
 datetime.date(2017, 1, 6),
 datetime.date(2017, 1, 7),
 datetime.date(2017, 1, 8)]

可以格式化为字符串

In [889]: [x.strftime('%m-%d') for x in a.tolist()]
Out[889]: ['01-01', '01-02', '01-03', '01-04', '01-05', '01-06', '01-07', '01-08']

没有仅包含月份和日期的datetime64 格式。

tolistitemtimedelta64[...]' produces adatetime.timedelta` 对象上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多