我有一个包含传递的毫秒数的列(从0开始,而不是纪元)
time
0 NaN
1 4067.0
2 3444053.0
3 50477685.0
4 60476311.0
5 70475303.0
6 80475303.0
我希望将此列转换为HH:mm:ss:ms格式。这可能吗?我发现使用 pd.to_datetime(df [&#39; time&#39;],unit =&#39; ms&#39;)始终会将列转换为纪元。< / p>
time
0 NaT
1 1971-04-14 02:27:33
虽然我想要的是:
time
0 NaT
1 00:00:04:67
答案 0 :(得分:2)
您可以使用
分隔时间部分df['time'] = pd.to_datetime(df['time', unit='ms').dt.time
结果将是
0 NaN
1 00:00:04.067000
2 00:57:24.053000
3 14:01:17.685000
4 16:47:56.311000
5 19:34:35.303000
6 22:21:15.303000
Name: time, dtype: object
接近所需的输出
df['time'] = pd.to_datetime(df['time'],
unit='ms').dt.strftime('%H:%M:%S:%f').str[:-3]
这将使用strftime显示微秒,切片将转换为毫秒
这是df['time']
0
1 00:00:04:067
2 00:57:24:053
3 14:01:17:685
4 16:47:56:311
5 19:34:35:303
6 22:21:15:303
Name: time, dtype: object
答案 1 :(得分:1)
您可能需要to_timedelta
。
df.time = pd.to_timedelta(df.time, unit='ms')
df.time
0 NaT
1 00:00:04.067000
2 00:57:24.053000
3 14:01:17.685000
4 16:47:56.311000
5 19:34:35.303000
6 22:21:15.303000
Name: time, dtype: timedelta64[ns]
要返回原点1,请使用df.total_seconds
:
df.time.dt.total_seconds() * 1000
0 NaN
1 4067.0
2 3444053.0
3 50477685.0
4 60476311.0
5 70475303.0
6 80475303.0
Name: time, dtype: float64