pandas-str到datetime的转换错误(60分钟字段)ParserError:分钟必须在0.59:2015-0



我正在尝试将熊猫中给定系列的strpd.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按空格拆分值,然后将日期部分转换为日期时间,并添加通过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:",则增加分钟字段,并在进行替换之前进行此操作。

两步流程

  1. 修复:60:,将其替换为:59:
  2. 然后转换为日期时间
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', '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"]))
)

最新更新