【问题标题】:An error occurred while doing astype('datetime64[ns]')执行 astype('datetime64[ns]') 时出错
【发布时间】:2020-05-19 02:03:56
【问题描述】:

主题有两行。第一列是时间。

11:46:36 ......
12:0:4.......

我想做的是

Subject['Time'] = Subject['Time'].astype('datetime64[ns]')
Subject['Time']=Subject['Time'].dt.time

第一行效果很好,它给了我

2020-05-18 11:46:36

但是当我想为第二行这样做时,它给了我以下错误:

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 12:00:04

我知道 pandas 以纳秒分辨率表示时间戳,因此可以使用 64 位整数表示时间跨度,该整数限制为大约 584 年。

当我执行Subject['Time'].dtype 时,它只会给我dtype('O')

【问题讨论】:

  • 类型 _date_time 结合日期和时间。如果您没有明确提供日期部分,则假定它是 1-01-01,可能是 1901-01-01。您必须添加日期或使用其他时间单位

标签: python pandas datetime timedelta


【解决方案1】:

您可以结合使用日期和时间增量来添加自定义日期,例如

import pandas as pd

df = pd.DataFrame({'Time': ['11:46:36', '12:0:4']})

# to datetime object; add a custom date, e.g. 2020-05-18:
df['Time'] = pd.to_datetime('2020-05-18') + pd.to_timedelta(df['Time'])
# df['Time']
# 0   2020-05-18 11:46:36
# 1   2020-05-18 12:00:04
# Name: Time, dtype: datetime64[ns]

【讨论】:

    【解决方案2】:

    datetime 不适用于没有“日期”部分的数据。您可能想改用timedelta

    pd.to_timedelta(Subject["Time"])
    #0   11:46:36
    #1   12:00:04
    #Name: Time, dtype: timedelta64[ns]
    

    【讨论】:

    • 感谢您的回答。但是时间增量也存在问题。稍后在我的代码中,我将这个时间与另一个数据时间进行比较。如果我将其更改为时间增量,我将无法进行比较。我想知道您是否可以修改您的答案,其中还包括数据时间。然而,该数据时间具有这种格式 datetime.time(14, 5, 8, 269000)。你可以在这一次也没有数据
    • 单独的 timedelta 对我来说似乎也没有多大用处 - delta 是什么?一天的开始?再次,这将涉及一些日期。当然,从长远来看,这一切都取决于您打算如何处理这些数据。
    猜你喜欢
    • 2020-05-20
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2016-11-26
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多