日期时间格式并添加日期更新时间

时间:2018-08-17 06:14:05

标签: python pandas datetime

我有一个数据文件,其中包含偶数数据,例如事件开始日期( 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

有人可以建议我如何获取上述格式吗?

1 个答案:

答案 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]