在Pandas中将毫秒列转换为HH:mm:ss:ms datetime

时间:2017-10-25 09:58:50

标签: python pandas

我有一个包含传递的毫秒数的列(从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

2 个答案:

答案 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