如何将这2个日期/时间列转换为1?

时间:2018-06-25 20:06:50

标签: python pandas date datetime posix

我已经花了几个小时从Python和Pandas文档中读取和尝试一些东西,但并没有得到我所需要的...

我有2列-一列称为DATE_GMT,一列称为TIME_GMT。日期列是不言自明的。 TIME列显示从0到24的小时数。

enter image description here

如何转换日期和时间列,然后合并它们,以便它们支持POSIX时间?

3 个答案:

答案 0 :(得分:3)

您可以直接将这两列作为两个字符串并将它们附加在一起。然后使用to_datetime中的pandas并指定字符串格式以将其更新为日期时间值。

代码

d = pd.DataFrame({'DATE_GMT':['20-JAN-16','20-JAN-16','20-JAN-16','20-JAN-16','20-JAN-16'],
                  'HOUR_GMT':[23,23,23,23,23]})
d['combined_date'] = pd.to_datetime(d['DATE_GMT'].astype(str)+' '+d['HOUR_GMT'].astype(str),format='%d-%b-%y %H') 

    DATE_GMT   HOUR_GMT combined_date
0   20-JAN-16      23   2016-01-20 23:00:00
1   20-JAN-16      23   2016-01-20 23:00:00
2   20-JAN-16      23   2016-01-20 23:00:00
3   20-JAN-16      23   2016-01-20 23:00:00
4   20-JAN-16      23   2016-01-20 23:00:00

答案 1 :(得分:2)

为此,您可以通过向to_datetime函数传递日期时间值的数据帧来使用该函数。

## sample data 
df = pd.DataFrame({'date':['20-JAN-2016','21-JAN-2016','21-JAN-2016','21-JAN-2016'],
                   'hour':[20,21,22,23]})

# convert to datetime
df['date'] = pd.to_datetime(df['date'])

# extract date components
df['year'] = df.date.dt.year
df['month'] = df.date.dt.month
df['day'] = df.date.dt.day

# remove date
df.drop('date', axis=1, inplace=True)

df['full_date'] = pd.to_datetime(df)

print(df)

   hour  year  month  day           full_date
0    20  2016      1   20 2016-01-20 20:00:00
1    21  2016      1   21 2016-01-21 21:00:00
2    22  2016      1   21 2016-01-21 22:00:00
3    23  2016      1   21 2016-01-21 23:00:00

答案 2 :(得分:2)

结合使用pd.to_datetimepd.to_timedelta

pd.to_datetime(df.date) + pd.to_timedelta(df.hour, unit='h')

0   2016-01-20 20:00:00
1   2016-01-21 21:00:00
2   2016-01-21 22:00:00
3   2016-01-21 23:00:00
dtype: datetime64[ns]