如何解决pandas str到datetime转换错误“分钟”字段中为60ParserError:分钟必须在0..59:2015-04-24 12:60:46
我正在尝试使用tell application "System Events" to keystroke "3" using command down
在熊猫中给定的str
系列转换为日期时间。但是,我有一些pd.to_datetime()
,其中分钟字段中有60个。
str
有什么办法解决这个问题吗?
解决方法
用Series.str.split
按空格分隔值,然后将日期部分转换为日期时间,并添加用to_timedelta
转换为时间增量的时间部分:
d = ['2015-04-24 12:60:46','2015-04-24 11:60:20','2015-03-14 12:60:02','2015-05-11 12:60:53']
df = pd.DataFrame({'date':d})
s = df['date'].str.split()
df['date'] = pd.to_datetime(s.str[0]) + pd.to_timedelta(s.str[1])
print (df)
date
0 2015-04-24 13:00:46
1 2015-04-24 12:00:20
2 2015-03-14 13:00:02
3 2015-05-11 13:00:53
另一个想法,如果所有数据始终都是60
,否则使用先前的解决方案:
df['date'] = (pd.to_datetime(df['date'].replace(":60:",":59:",regex=True)) +
pd.Timedelta(1,'min'))
print (df)
date
0 2015-04-24 13:00:46
1 2015-04-24 12:00:20
2 2015-03-14 13:00:02
3 2015-05-11 13:00:53
,
如果您想将60
设为0
,则将":60:"
替换为":00:"
。
如果希望60
在下一分钟为零秒,请在存在":60:"
的情况下增加分钟字段,并在进行替换之前这样做。
两步过程
-
通过使用:59: 替换
- 修复:60:
- 然后转换为日期时间
d = ['2015-04-24 12:60:46','2015-05-11 12:60:53','2015-04-26 11:60:44','2015-05-31 15:60:59','2015-04-02 07:60:10','2015-04-23 12:60:59','2015-05-07 18:60:11','2015-04-27 12:60:39','2015-04-10 09:60:26','2015-04-03 18:60:05','2015-05-20 08:60:37','2015-05-08 12:60:17','2015-04-16 12:60:50','2015-03-26 09:60:51','2015-03-20 08:60:29','2015-03-21 13:60:19','2015-03-07 01:60:16','2015-05-31 14:60:56','2015-03-06 18:60:01','2015-05-17 14:60:46','2015-03-10 04:60:18','2015-05-23 12:60:30','2015-04-17 09:60:53','2015-04-23 17:60:34','2015-03-31 12:60:50']
(pd.DataFrame({"Date":d})
.assign(Date=lambda x: x["Date"].str.replace(":60:",":59:"))
.assign(Date=lambda x: pd.to_datetime(x["Date"]))
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。