python - 日期时间转换 ValueError Pandas
问题描述
我有一个时间错误的数据集(24:00:00 到 26:18:00)我想知道在 python 中处理这种数据的最佳方法是什么。
我试图将列从对象转换为datetime
使用此代码:
stopTimeArrDep['departure_time'] = pd.to_datetime(stopTimeArrDep['departure_time']\
,format='%H:%M:%S')
但我得到这个错误:
ValueError: time data '24:04:00' does not match format '%H:%M:%S' (match)
所以我尝试添加errors='coerce'
以避免此错误。但我最终得到了空列和添加到每一行的不需要的日期。
stopTimeArrDep['departure_time'] = pd.to_datetime(stopTimeArrDep['departure_time']\
,format='%H:%M:%S',errors='coerce')
输出样本:
original_col converted_col
23:45:00 1/1/00 23:45:00
23:51:00 1/1/00 23:51:00
24:04:00
23:42:00 1/1/00 23:42:00
26:01:00
关于处理此问题的最佳方法的任何建议。谢谢,
解决方案
解决方案
如果有任何意义,您可以将其original_col
视为经过的时间间隔而不是时间。您可以使用datetime.timedelta
然后将其添加datetime.timedelta
到 adatetime.datetime
以获取一些日期时间对象;您最终可以使用它来分别获取日期和时间。
例子
from datetime import datetime, timedelta
time_string = "20:30:20"
t = datetime.utcnow()
print('t: {}'.format(t))
HH, MM, SS = [int(x) for x in time_string.split(':')]
dt = timedelta(hours=HH, minutes=MM, seconds=SS)
print('dt: {}'.format(dt))
t2 = t + dt
print('t2: {}'.format(t2))
print('t2.date: {} | t2.time: {}'.format(str(t2.date()), str(t2.time()).split('.')[0]))
输出:
t: 2019-10-24 04:43:08.255027
dt: 20:30:20
t2: 2019-10-25 01:13:28.255027
t2.date: 2019-10-25 | t2.time: 01:13:28
为您的用例
# Define Custom Function
def process_row(time_string):
HH, MM, SS = [int(x) for x in time_string.split(':')]
dt = timedelta(hours=HH, minutes=MM, seconds=SS)
return dt
# Make Dummy Data
original_col = ["23:45:00", "23:51:00", "24:04:00", "23:42:00", "26:01:00"]
df = pd.DataFrame({'original_col': original_col, 'dt': None})
# Process Dataframe
df['dt'] = df.apply(lambda x: process_row(x['original_col']), axis=1)
df['t'] = datetime.utcnow()
df['t2'] = df['dt'] + df['t']
# extracting date from timestamp
df['Date'] = [datetime.date(d) for d in df['t2']]
# extracting time from timestamp
df['Time'] = [datetime.time(d) for d in df['t2']]
df
使用pandas.to_datetime()
:
pd.to_datetime(df['t2'], format='%H:%M:%S',errors='coerce')
输出:
0 2019-10-25 09:38:39.349410
1 2019-10-25 09:44:39.349410
2 2019-10-25 09:57:39.349410
3 2019-10-25 09:35:39.349410
4 2019-10-25 11:54:39.349410
Name: t2, dtype: datetime64[ns]
参考
推荐阅读
- android-studio - VS code 和 Android Studio 找不到模拟器
- ios - 从 Firebase 存储中检索图像时出现错误 nil
- javascript - 节点 events.js:174 throw er; // 未处理的“错误”事件
- c# - C# DataSet Designer - AccesDB - Combine two rows into one
- python - Python上的CGI(Mac OS)
- dart - Mailer2 在使用颤振创建的 Android 版本中不起作用
- javascript - 计算在 textarea 中写的单词
- scala - 如何在Scala中对多种类型进行模式匹配?
- python - Python 数字格式
- java - Maven 导入的 JAR 的 java.lang.ClassNotFoundException