有效地序列化时间戳

时间:2017-03-23 17:29:14

标签: python pandas datetime

我有一个要分析的数据框,其中有一列日期为日期时间,一列时间为整数。

我想将这两列合并到一个时间戳字段中进行进一步分析,但无法快速找到方法。

我有这个代码可以使用,但由于数据帧的长度(~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;],这样它们可以快速求和,而不需要费力的循环。

最糟糕的情况我然后将该整数一次性转换回日期时间,或者只使用秒数作为我的数据类型向前发展。

感谢您的帮助。

1 个答案:

答案 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'])转换