【问题标题】:Python: Converting time units on a DataFramePython:在 DataFrame 上转换时间单位
【发布时间】:2020-03-18 16:41:37
【问题描述】:

伙计们。我在 DataFrame 中的两个 Datetime 列之间进行了算术运算,产生了以下结果:

28 days 15:16:53
7 days 13:12:31
334 days 01:04:46.123501
376 days 09:45:21.546136
-1 days +23:56:21.954750
-1 days +23:59:40.110747

当我尝试将它放入一个 numpy 数组时,它变成了纳秒:

array([ 2474213000000000,   652351000000000, 28861486123501000, ...,
       -218045250000,      -19889253000,   673953486963000],
  dtype='timedelta64[ns]')

当我尝试使用此数组绘制直方图时,出现以下错误:

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

我需要把它变成一个更易于管理的时间单位,这样我就可以制作一个数组,然后制作直方图。谢谢!

【问题讨论】:

  • 问题是 dtype='timedelta64[ns]' .(hist) 函数使用了一些无法处理 timedelta64[ns]' 的函数(例如:isnan)所以你可以简单地改变类型到 (dtype = 'float64')
  • 请提供minimal reproducible example,以及完整的错误消息。

标签: python numpy datetime timedelta


【解决方案1】:

假设您有一系列 Timedelta(让我们称之为delta

0           28 days 15:16:53
1            7 days 13:12:31
2   334 days 01:04:46.123501
3   376 days 09:45:21.546136
4   -1 days +23:56:21.954750
5   -1 days +23:59:40.110747
dtype: timedelta64[ns]

您可以轻松地将其转换为一系列浮点天数:

delta.astype('int64')/(24*60*60*1000000000)

给予:

0     28.636725
1      7.550359
2    334.044978
3    376.406499
4     -0.002524
5     -0.000230
dtype: float64

只需删除 24* 即可获得浮点小时数,分钟或秒数相同

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多