我有一个名为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