【问题标题】:xarray/datetime64[ns]: remove or normalise time from datetimexarray/datetime64[ns]:从 datetime 中删除或规范化时间
【发布时间】:2019-02-12 15:29:57
【问题描述】:

我有一个坐标为“时间”的数据数组arrarr

    <xarray.DataArray 'T' (time: 731)>
array([244.40161, 244.39998, ..., 244.40936, 244.40549], dtype=float32)
Coordinates:
  * time         (time) datetime64[ns] 1979-01-01T09:00:00 ... 1980-12-31T09:00:00

提取前5个时间坐标,arr.time.values[:5]

array(['1979-01-01T09:00:00.000000000', '1979-01-02T09:00:00.000000000',
       '1979-01-03T09:00:00.000000000', '1979-01-04T09:00:00.000000000',
       '1979-01-05T09:00:00.000000000'], dtype='datetime64[ns]')

我希望我的日期时间格式为 '1979-01-01''1979-01-02' 等,没有时间,或者将时间标准化为 00:00:00。

熊猫数据框有一些解决方案,但我不太确定如何在此处应用它们,因为这些功能不适用(Converting between datetime, Timestamp and datetime64Keep only date part when using pandas.to_datetime

【问题讨论】:

    标签: python-xarray


    【解决方案1】:

    有几种方法可以做到这一点。我经常使用的快速而肮脏的方法是使用 resample:

    da.resample(time='1D').first()
    

    更稳健一点的方法是直接修改时间索引:

    da['time'] = da.indexes['time'].normalize()
    

    最后,这通常可以通过创建一个新的日期时间索引来完成:

    da['time'] = pd.date_range(da['time'][0], periods=len(da['time']), freq='1D')
    

    请注意,第二个和第三个示例在计算上将比第一个便宜,但确实需要直接使用下属 Pandas 索引。

    【讨论】:

    • 非常感谢 - 这是一种简洁的直接方式,因为它不需要先转换为数据帧等,arr['time'] = arr.indexes['time'].normalize()arr 是一个 xarray 数据数组的情况下工作得很好。你给出的第二个和第三个例子有什么区别?
    • 在这种情况下,我的第2个和第3个例子的操作基本相同。第三个更具可扩展性,因为您可以使用它来替换任何现有的时间索引。
    猜你喜欢
    • 2019-01-20
    • 2017-01-05
    • 2018-09-26
    • 2020-11-05
    • 1970-01-01
    • 2019-03-29
    • 2023-01-09
    • 2016-11-26
    相关资源
    最近更新 更多