我有一个数据文件,其中包含偶数数据,例如事件开始日期( Date ),开始时间( KOTime )和事件时间( EveTime )。 以下是数据示例。
df = pd.DataFrame()
df['Date'] = ['2018/08/12','2018/08/12','2018/08/12','2018/08/12','2018/08/12','2018/08/12']
df['KOTime'] = ['12:30:00','12:30:00','12:30:00','12:30:00','12:30:00','12:30:00']
df['EveTime'] = ['04:50:00','01:03:00','1900-01-03 05:22:00','1900-01-02 16:04:00','1900-01-01 10:28:00','1900-01-01 16:23:00']
正如在数据中可以看到的那样,未在原始数据文件中格式化Evetime 。 如果Evetime大于24小时,则显示为1900-01-xx。 如果我们查看 EveTime 的第三个值,则显示为1900-01-03 05:22:00。 应该是 2018/08/12 13:47:22 。 我想创建一个包含日期和 EveTime 的新列,预期的输出如下:
2018/08/12 12:34:50
2018/08/12 12:31:03
2018/08/12 13:47:22
2018/08/12 13:34:04
2018/08/12 12:40:28
2018/08/12 12:46:23
有人可以建议我如何获取上述格式吗?
答案 0 :(得分:2)
我认为需要将值转换为timedelta
并添加到datetime
的列中:
#convert to numeric
num = pd.to_numeric(df['EveTime'].str[-11:-8], errors='coerce')
#convert to timedeltas with seconds
td1 = pd.to_timedelta(np.where(num > 1, num, 0) * 24 * 60, unit='s')
td2 = pd.to_timedelta('00:' + df['EveTime'].str[-8:-3])
df['date'] = pd.to_datetime(df['Date'] + ' ' + df['KOTime']) + td1 + td2
print (df)
Date KOTime EveTime date
0 2018/08/12 12:30:00 04:50:00 2018-08-12 12:34:50
1 2018/08/12 12:30:00 01:03:00 2018-08-12 12:31:03
2 2018/08/12 12:30:00 1900-01-03 05:22:00 2018-08-12 13:47:22
3 2018/08/12 12:30:00 1900-01-02 16:04:00 2018-08-12 13:34:04
4 2018/08/12 12:30:00 1900-01-01 10:28:00 2018-08-12 12:40:28
5 2018/08/12 12:30:00 1900-01-01 16:23:00 2018-08-12 12:46:23
print (td1)
TimedeltaIndex(['00:00:00', '00:00:00', '01:12:00', '00:48:00', '00:00:00',
'00:00:00'],
dtype='timedelta64[ns]', freq=None)
print (td2)
0 00:04:50
1 00:01:03
2 00:05:22
3 00:16:04
4 00:10:28
5 00:16:23
Name: EveTime, dtype: timedelta64[ns]