【问题标题】:how to extract days as integers from a timedelta64[ns] object in python如何从python中的timedelta64 [ns]对象中提取天数作为整数
【发布时间】:2016-02-09 21:15:29
【问题描述】:

我有一个 pandas 数据框,其列如下:

In [96]: data['difference']
Out[96]: 
0                 NaT
1     1 days 21:34:30
2     0 days 16:57:36
3     0 days 00:16:51
4     0 days 15:52:38
5     0 days 14:19:34
6     0 days 02:54:46
7     1 days 04:21:28
8     0 days 01:58:55
9     0 days 10:30:35
10    0 days 07:53:04
....
Name: difference, dtype: timedelta64[ns]

我想在它旁边创建一个列,其中的整数对应于该列中的天数。

【问题讨论】:

  • 我只想要一个像 1,0,0,0,0,0,1,0,0,0 这样的列
  • 我想你可以在这里找到答案:stackoverflow.com/questions/18215317/…
  • 我已经看过了,但解决方案 days.astype(int) 对我不起作用

标签: python timedelta


【解决方案1】:

根据pandas 文档,您可以使用timedelta64 对象的astype 方法提取天数,结果为float64 类型。

data['difference'].astype('timedelta64[D]')

【讨论】:

    【解决方案2】:

    您可以使用 dt.days 从您的系列中提取几天,

    df.difference
    Out[117]: 
    0   -1 days +00:00:05
    1                 NaT
    2   -1 days +00:00:05
    3     1 days 00:00:00
    dtype: timedelta64[ns]
    
    df.difference.dt.days
    Out[118]: 
    0    -1
    1   NaN
    2    -1
    3     1
    dtype: float64
    

    所有其他组件提取,

    dr
    Out[93]: 
    0   -1 days +00:00:05
    1                 NaT
    2     1 days 02:04:05
    3     1 days 00:00:00
    dtype: timedelta64[ns]
    
    dr.dt.components
    Out[95]: 
       days  hours  minutes  seconds  milliseconds  microseconds  nanoseconds
    0    -1      0        0        5             0             0            0
    1   NaN    NaN      NaN      NaN           NaN           NaN          NaN
    2     1      2        4        5             0             0            0
    3     1      0        0        0             0             0            0
    

    【讨论】:

    • 这个方法很慢。相比之下,astype('timedelta64[D]')(约 96ms) 方法比 dt.days.(约 24s) 处理 4,000,000 行要高效得多。
    【解决方案3】:

    这应该将您的 timedelta64[ns] 类型转换为代表天数的 float64

    data['difference'].astype('timedelta64[D]')
    

    【讨论】:

    • 这个方法astype('timedelta64[D]')(约96ms)比dt.days.(约24s)的4,000,000行效率高很多。
    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2014-12-14
    • 2019-12-30
    相关资源
    最近更新 更多