【问题标题】:Converting pandas date column into seconds elapsed将熊猫日期列转换为经过的秒数
【发布时间】:2017-11-10 17:40:21
【问题描述】:

我有一个多列的 pandas 数据框,其中有一列 datetime64[ns] 数据。时间采用 HH:MM:SS 格式。如何将此日期列转换为经过的秒数列?就像时间以秒为单位表示的 10:00:00 一样,这将是 36000。秒应该是 float64 类型的格式。

示例数据列

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    新答案
    将您的文本转换为Timedelta

    df['Origin Time(Local)'] = pd.to_timedelta(df['Origin Time(Local)'])
    df['Seconds'] = df['Origin Time(Local)'].dt.total_seconds()
    

    旧答案

    考虑数据框df

    df = pd.DataFrame(dict(Date=pd.date_range('2017-03-01', '2017-03-02', freq='2H')))
    
                      Date
    0  2017-03-01 00:00:00
    1  2017-03-01 02:00:00
    2  2017-03-01 04:00:00
    3  2017-03-01 06:00:00
    4  2017-03-01 08:00:00
    5  2017-03-01 10:00:00
    6  2017-03-01 12:00:00
    7  2017-03-01 14:00:00
    8  2017-03-01 16:00:00
    9  2017-03-01 18:00:00
    10 2017-03-01 20:00:00
    11 2017-03-01 22:00:00
    12 2017-03-02 00:00:00
    

    从时间戳中减去最近的一天并使用total_secondstotal_secondsTimedelta 的属性。通过取两个系列Timestamps之间的差,我们得到一系列Timedeltas

    (df.Date - df.Date.dt.floor('D')).dt.total_seconds()
    # equivalent to
    # (df.Date - pd.to_datetime(df.Date.dt.date)).dt.total_seconds()
    
    0         0.0
    1      7200.0
    2     14400.0
    3     21600.0
    4     28800.0
    5     36000.0
    6     43200.0
    7     50400.0
    8     57600.0
    9     64800.0
    10    72000.0
    11    79200.0
    12        0.0
    Name: Date, dtype: float64
    

    把它放在一个新的列

    df.assign(seconds=(df.Date - df.Date.dt.floor('D')).dt.total_seconds())
    
                      Date  seconds
    0  2017-03-01 00:00:00      0.0
    1  2017-03-01 02:00:00   7200.0
    2  2017-03-01 04:00:00  14400.0
    3  2017-03-01 06:00:00  21600.0
    4  2017-03-01 08:00:00  28800.0
    5  2017-03-01 10:00:00  36000.0
    6  2017-03-01 12:00:00  43200.0
    7  2017-03-01 14:00:00  50400.0
    8  2017-03-01 16:00:00  57600.0
    9  2017-03-01 18:00:00  64800.0
    10 2017-03-01 20:00:00  72000.0
    11 2017-03-01 22:00:00  79200.0
    12 2017-03-02 00:00:00      0.0
    

    【讨论】:

    • 如果我的某些日期列有对象属性怎么办?我的一些文件在导入时具有对象 dtype 而不是 datetime 类型,即使它们的时间格式相同。
    • @Fanylion 然后使用df.Date = pd.to_datetime(df.Date)进行预处理
    • 嗯。当我这样做时,我得到 不能转换为日期时间。可能是我如何导入我的模块(从日期时间导入日期时间)。
    • 我认为您的数据不是您所说的那样。当您可以轻松地编辑您的帖子并向我展示数据时,我不会花更多时间猜测您的数据。
    • 我添加了我的数据图片。专栏的整个长度很长,所以我无法将其全部发布。该列的类型是 pandas.core.series.Series,每个单独的元素都是 datetime.time 类型。
    【解决方案2】:

    它会起作用的:

    df['time'].dt.total_seconds()
    

    问候

    【讨论】:

    • 我将 datetime 模块导入为 from datetime import datetime. 我得到 'DatetimeProperties' 对象没有属性 'total_seconds' 错误。如何解决这个问题?
    • 试试这个:df['time'] = pd.to_datetime(df['time'])
    • @FdMon 我收到与 Fanylion 相同的错误它仍然无法使用 pd.to_datetime() 解决
    猜你喜欢
    • 2015-09-19
    • 2017-03-05
    • 2018-08-09
    • 2018-12-08
    • 2020-12-21
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多