我有一个要分析的数据框,其中有一列日期为日期时间,一列时间为整数。
我想将这两列合并到一个时间戳字段中进行进一步分析,但无法快速找到方法。
我有这个代码可以使用,但由于数据帧的长度(~1m条目)需要一个不合时宜的时间
for i in range(len(my_df))
my_df['gen_timestamp'][i] = datetime.datetime.combine(my_df['date'][i],
datetime.time(my_df['hour'][i])
我想要做的是以某种方式将my_df [' date']中的日期时间类型转换为整数(例如以秒为单位的时间戳)和my_df中的整数类型['小时& #39;],这样它们可以快速求和,而不需要费力的循环。
最糟糕的情况我然后将该整数一次性转换回日期时间,或者只使用秒数作为我的数据类型向前发展。
感谢您的帮助。
答案 0 :(得分:2)
IIUC您可以构建一个TimedeltaIndex并将其添加到您的日期时间:
In [112]:
# sample data
df = pd.DataFrame({'date':pd.date_range(dt.datetime(2017,1,1), periods=10), 'hour':np.arange(10)})
df
Out[112]:
date hour
0 2017-01-01 0
1 2017-01-02 1
2 2017-01-03 2
3 2017-01-04 3
4 2017-01-05 4
5 2017-01-06 5
6 2017-01-07 6
7 2017-01-08 7
8 2017-01-09 8
9 2017-01-10 9
In [113]:
df['timestamp'] = df['date'] + pd.TimedeltaIndex(df['hour'], unit='h')
df
Out[113]:
date hour timestamp
0 2017-01-01 0 2017-01-01 00:00:00
1 2017-01-02 1 2017-01-02 01:00:00
2 2017-01-03 2 2017-01-03 02:00:00
3 2017-01-04 3 2017-01-04 03:00:00
4 2017-01-05 4 2017-01-05 04:00:00
5 2017-01-06 5 2017-01-06 05:00:00
6 2017-01-07 6 2017-01-07 06:00:00
7 2017-01-08 7 2017-01-08 07:00:00
8 2017-01-09 8 2017-01-09 08:00:00
9 2017-01-10 9 2017-01-10 09:00:00
所以在你的情况下,我希望以下工作:
my_df['gen_timestamp'] = my_df['date'] + pd.TimedeltaIndex(my_df['hour'], unit='h')
这假设my_df['date']
已经Datetime
,如果不是先使用my_df['date'] = pd.to_datetime(my_df['date'])
转换