首页 > 解决方案 > 如何将具有对象数据类型的时间纳秒列转换为日期时间?

问题描述

我在“对象数据类型”中有以下数据集。我想将数据类型更改为日期时间。

0           00:00:00.000:
1           00:00:00.000: 
2           00:00:00.000:
3           00:00:00.000:
4           00:00:00.000: 
... 
4943983    16:11:21.000: 
4943984    16:11:24.000:    
4943986    16:11:39.000:   
4943987    16:11:51.000:

Name: Time, Length: 4943988, dtype: object  

​我尝试了以下命令。但它用 nan 替换了所有值。

timefmt = "%H:%M:%S"    

dadr['Time'] = pd.to_datetime(dadr['Time'], 
errors='coerce').dt.strftime(timefmt)

输出:

0         NaN    
1         NaN    
2         NaN    
3         NaN    
4         NaN     
       ..      
4943983   NaN      
4943984   NaN      
4943985   NaN     
4943986   NaN     
4943987   NaN     

Name: Time, Length: 4943988, dtype: float64

我想补充一点,秒位置中有非零值的时间域。如时间数据'07:05:15.026:'不匹配格式'%H:%M:%S.000:'(匹配)

标签: python-3.xpandasdataframedatetimetypes

解决方案


您可以尝试将timefmttoformat=参数放入pd.to_datetime

timefmt = "%H:%M:%S.000:"
df['Time'] = pd.to_datetime(df['Time'], format=timefmt)

print(df)

印刷:

       idx                Time
0  4943983 1900-01-01 16:11:21
1  4943984 1900-01-01 16:11:24
2  4943985 1900-01-01 16:11:38
3  4943986 1900-01-01 16:11:39
4  4943987 1900-01-01 16:11:51

编辑:要解析之后的第二个分数.,您可以使用%f

timefmt = "%H:%M:%S.%f:"
df['Time'] = pd.to_datetime(df['Time'], format=timefmt)

print(df)

印刷:

       idx                    Time
0  4943983 1900-01-01 16:11:21.100
1  4943984 1900-01-01 16:11:24.200
2  4943985 1900-01-01 16:11:38.300
3  4943986 1900-01-01 16:11:39.400
4  4943987 1900-01-01 16:11:51.500

推荐阅读