python - pandas str 到 datetime 转换错误(60 分钟字段) ParserError: minute must be in 0..59: 2015-04-24 12:60:46
问题描述
我正在尝试使用给定的str
熊猫系列转换为日期时间pd.to_datetime()
。但是,我有一些str
其中 60 分钟字段。
['2015-04-24 12:60:46',
'2015-04-24 11:60:20',
'2015-03-14 12:60:02',
'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',
.....]
知道如何解决这个问题吗?
解决方案
按空格拆分值,Series.str.split
然后将日期部分转换为日期时间,并添加转换为 timedeltas 的时间部分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
推荐阅读
- interrupt - HAL_UART_RxCpltCallback() 没有被执行
- html - 如何使用左侧的徽标和菜单链接以及右侧的表单控件来设置内联导航栏的样式
- javascript - 如何创建异步方法的同步版本?
- node.js - 如何使用 next.js 进行 firebase 身份验证
- awk - 如何将列的总和计算为一个数字?
- android - 如何解决我在 Playstore 中被拒绝的 android 应用程序的问题?
- bash - 在 bash/awk 中有什么方法可以打印出输入文件的第一列(第一列是 IPv4 和 IPv6),并将其转换为它们的主机名?
- elasticsearch - 谷歌云存储库插件
- xamarin.forms - Xamarin Forms:Prism:Android:MainActivity:单击推送通知:Android 上不支持全球范围内的 PushAsync,请使用 NavigationPage
- python - 通过 python 和 requests 模块下载的文本文件的前两个字符无法识别