如何将所有 100,000 列周期时间数据 (HH:MM:SS) 转换为秒?



我有一个名为DF1的表,其中有超过100,000列。

device_id             time       x        y      z
ghXzbQTyASMwePeQJXQ     00:04:23   1787.4   -2.1   4992.7
00:16:51   9757.3   -4.1   4922.0
00:25:47   3337.4   -2.2   4132.4
bLXzbQTyASMxeP6QJXQ     00:36:24   6957.2   -1.8   1342.9
00:47:20   2956.8   -3.7   7942.8
:
:

我想将"时间"列中的所有数据从 HH:MM:SS 转换为秒。

我运行了这个函数(我从提出的类似问题中得到的)

def get_sec(time_str):
"""Get Seconds from time."""
h, m, s = time_str.split(':')
return int(h) * 3600 + int(m) * 60 + int(s)

并分别使用以下每个代码调用它。

get_sec(DF23[time])
get_sec(DF23.time)

但是,每个分别产生以下错误:

<module 'time' (built-in)>
'DataFrame' object has no attribute 'time'

如何将该函数应用于整个"时间"列以将所有 HH:MM:SS 数据更改为秒,或者是否有另一种更有效的方法?

您应该使用字符串作为列标识符:

get_sec(DF23['time'])

对于那些好奇的人来说,答案是:

DF1['time'] = DF1['time'].apply(lambda x: ((x.hour*60+x.minute)*60+x.second)/60)

使用pd.to_timedelta然后dt.total_seconds()

前任:

df1 = pd.DataFrame({'time':["00:04:23", "00:16:51", "00:25:47"]})
df1['seconds'] = pd.to_timedelta(df1['time']).dt.total_seconds()
print(df1)

输出:

time  seconds
0  00:04:23    263.0
1  00:16:51   1011.0
2  00:25:47   1547.0

最新更新