我有一个有上千行的数据
df_11=
dataReceived time
0 1 15:00:56.052554
1 1 15:02:18.764644
2 1 02:43:10
3 1 05:46:12
...
6054 1 23:15:14.5687
当我试图将列time
转换为date time时,如下所示:
pd.to_datetime(df_11['time'], format='%H:%M:%S.%f')
我发现了一个明显的错误:
ValueError: time data '02:43:10' does not match format '%H:%M:%S.%f' (match)
它们是否可以轻松地将.0附加到特定的值中以满足标准?我觉得这是最好的办法
我发现了类似的问题,here,但是我不想在使用dataframe时使用循环
thx
发布于 2022-02-25 13:16:51
你有不同的选择。
(1)在分析日期之前编辑文本
from datetime import datetime
date_texts = [
"15:00:56.052554",
"02:43:10",
"05:46:12",
"23:15:14.5687"
]
for date_text in date_texts:
if not '.' in date_text:
date_text += ".0"
dt = datetime.strptime(date_text, "%H:%M:%S.%f")
print(f"{date_text} --> {dt}")
(2)首先检查日期格式,然后在解析时应用正确的格式。
from datetime import datetime
import re
date_texts = [
"15:00:56.052554",
"02:43:10",
"05:46:12",
"23:15:14.5687"
]
for date_text in date_texts:
if re.match(r"^[0-9]+:[0-9]+:[0-9]+\.[0-9]+$", date_text):
dt = datetime.strptime(date_text, "%H:%M:%S.%f")
else:
dt = datetime.strptime(date_text, "%H:%M:%S")
print(f"{date_text} --> {dt}")
(3)尝试第一种格式,捕获异常,然后尝试第二种格式
from datetime import datetime
date_texts = [
"15:00:56.052554",
"02:43:10",
"05:46:12",
"23:15:14.5687"
]
for date_text in date_texts:
try:
dt = datetime.strptime(date_text, "%H:%M:%S.%f")
except ValueError:
dt = datetime.strptime(date_text, "%H:%M:%S")
print(f"{date_text} --> {dt}")
https://stackoverflow.com/questions/71266142
复制相似问题