【发布时间】:2017-11-10 17:40:21
【问题描述】:
我有一个多列的 pandas 数据框,其中有一列 datetime64[ns] 数据。时间采用 HH:MM:SS 格式。如何将此日期列转换为经过的秒数列?就像时间以秒为单位表示的 10:00:00 一样,这将是 36000。秒应该是 float64 类型的格式。
示例数据列
【问题讨论】:
标签: python pandas datetime dataframe
我有一个多列的 pandas 数据框,其中有一列 datetime64[ns] 数据。时间采用 HH:MM:SS 格式。如何将此日期列转换为经过的秒数列?就像时间以秒为单位表示的 10:00:00 一样,这将是 36000。秒应该是 float64 类型的格式。
示例数据列
【问题讨论】:
标签: python pandas datetime dataframe
新答案
将您的文本转换为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_seconds。 total_seconds 是 Timedelta 的属性。通过取两个系列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
【讨论】:
df.Date = pd.to_datetime(df.Date)进行预处理
它会起作用的:
df['time'].dt.total_seconds()
问候
【讨论】:
from datetime import datetime. 我得到 'DatetimeProperties' 对象没有属性 'total_seconds' 错误。如何解决这个问题?