【问题标题】:Pandas Timedelta error with datetime64[ns, UTC] Fields带有 datetime64 [ns, UTC] 字段的 Pandas Timedelta 错误
【发布时间】:2018-11-03 00:38:23
【问题描述】:

我有一个数据框,其中包含如下所示的两个时间字段。当我尝试在它们之间获取 Timedelta 时,我收到以下错误消息。我已经为这些字段包含了 .info() 。有谁知道问题是什么,你能建议如何解决它吗?非常感谢任何提示。

Data:

                            et_utc                    ts_utc
0 2018-05-02 09:24:29.304000+00:00 2018-05-02 09:39:15+00:00
1 2018-05-02 09:26:12.132000+00:00 2018-05-02 09:39:15+00:00
2 2018-05-02 09:28:37.913000+00:00 2018-05-02 09:39:12+00:00
3 2018-05-02 09:28:37.913000+00:00 2018-05-02 09:28:49+00:00
4 2018-05-02 10:39:48.820000+00:00 2018-05-02 10:39:48+00:00


Data description:

df[[‘et_utc','ts_utc']].info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 25625 entries, 0 to 25624
Data columns (total 2 columns):
et_utc    25625 non-null datetime64[ns, UTC]
ts_utc    25625 non-null datetime64[ns, UTC]
dtypes: datetime64[ns, UTC](2)
memory usage: 1.8 MB


Code:

df['t_delta']=pd.Timedelta(df['et_utc'] - df['ts_utc']).seconds


Error:

ValueError: Value must be Timedelta, string, integer, float, timedelta or convertible

【问题讨论】:

标签: python python-2.7 pandas time-series


【解决方案1】:

如果你想以秒为单位获取时间增量,根据official documentation,你可以这样做:

df['t_delta']=(df['et_utc'] - df['ts_utc']).astype('timedelta64[s]')

【讨论】:

    【解决方案2】:

    使用Series dt accessor 访问日期时间(timedelta)系列的方法和属性。

    >>> (df['et_utc'] - df['ts_utc']).dt.total_seconds()
    0   -885.696
    1   -782.868
    2   -634.087
    3    -11.087
    4      0.820
    dtype: float64
    >>> df['t_delta'] = (df['et_utc'] - df['ts_utc']).dt.total_seconds()
    >>>
    >>> print(df)
                       et_utc              ts_utc  t_delta
    0 2018-05-02 09:24:29.304 2018-05-02 09:39:15 -885.696
    1 2018-05-02 09:26:12.132 2018-05-02 09:39:15 -782.868
    2 2018-05-02 09:28:37.913 2018-05-02 09:39:12 -634.087
    3 2018-05-02 09:28:37.913 2018-05-02 09:28:49  -11.087
    4 2018-05-02 10:39:48.820 2018-05-02 10:39:48    0.820
    >>> 
    

    Datetimelike properties


    astyping 相当于地板分割,它失去​​了一点分辨率。

    >>> (df['et_utc'] - df['ts_utc']).astype('timedelta64[s]')
    0   -886.0
    1   -783.0
    2   -635.0
    3    -12.0
    4      0.0
    dtype: float64
    >>> 
    

    【讨论】:

    • @Ben.T - 您的答案中的链接也显示了真正的除法 timedelta64[s]
    猜你喜欢
    • 2020-11-05
    • 2020-10-17
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多