将pandas日期列转换为经过的秒数

3
我有一个包含多列的pandas数据框,其中一列是datetime64[ns]格式的时间数据。时间格式为HH:MM:SS。如何将这一列日期转换为经过的秒数?比如如果时间是10:00:00,那么对应的秒数是36000。秒数应该以float64类型格式呈现。
示例数据列:

Example data column

2个回答

5

新回答
将您的文本转换为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

如果我的一些日期列具有对象属性怎么办?当导入一些文件时,即使是相同的时间格式,有些文件的数据类型为对象而不是日期时间类型。 - Fanylion
@Fanylion 然后使用 df.Date = pd.to_datetime(df.Date) 进行预处理。 - piRSquared
嗯,当我这样做时,会出现<class 'datetime.time'>无法转换为datetime的错误。可能是因为我导入模块的方式有问题(从datetime导入datetime)。 - Fanylion
1
我认为你的数据不是你所说的那样。如果你可以轻松地编辑帖子并向我展示数据,我就不会再花更多时间去猜测数据了。 - piRSquared
我添加了一张我的数据图片。整个列的长度非常长,所以我无法全部发布。该列的类型是pandas.core.series.Series,每个单独的元素都是datetime.time类型。 - Fanylion
显示剩余4条评论

-1

它会起作用:

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

敬礼


1
我正在导入datetime模块,使用语句from datetime import datetime. 但是我遇到了“DatetimeProperties”对象没有“total_seconds”属性的错误。如何解决这个问题? - Fanylion
尝试这样做: df['time'] = pd.to_datetime(df['time']) - FdMon
@FdMon 我遇到了和 Fanylion 一样的错误,使用 pd.to_datetime() 仍然没有解决。 - Krissh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接