将时间转换为总秒数

Covert Time to total seconds

我想从现有的 'TimeMajor' 列创建一个新列 'Time',该列将包含总秒数形式的时间,其内容将是整数类型。例如,

00:00:05 = 5 secs
00:14:10 = 850 secs
02:30:10 = 9010 secs

代码:

data["TimeMajor"] = pd.to_datetime(data["created_at"])
data['Time'] = data.TimeMajor.dt.time
data['Time'].timedelta.total_seconds()

给出:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-47-d7912fbaf9b4> in <module>()
----> 1 data['Time'].timedelta.total_seconds()

/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __getattr__(self, name)
   5272             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5273                 return self[name]
-> 5274             return object.__getattribute__(self, name)
   5275 
   5276     def __setattr__(self, name: str, value) -> None:

AttributeError: 'Series' object has no attribute 'timedelta'

首先转换为 timedelta dtype,使用 datetime 列中 time 组件的等效字符串 'data["TimeMajor"]':

import pandas as pd

data = pd.DataFrame({'TimeMajor': pd.to_datetime(['2020-06-12 02:30:10'])})

data['Timedelta'] = pd.to_timedelta(data['TimeMajor'].dt.time.astype(str))

data['Timedelta'].dt.total_seconds()
# 0    9010.0
# Name: Timedelta, dtype: float64

或直接到列 'Time':

data['Time'] = pd.to_timedelta(data['TimeMajor'].dt.time.astype(str)).dt.total_seconds()

...或者如果你有一个参考日期,你想从中计算秒数,你甚至不需要明确地转换为 timedelta:

refdate = pd.to_datetime('2020-06-12')
data['Timedelta'] = data['TimeMajor'] - refdate