将多列时间戳值转换为格林威治标准时间,不使用 pandas 中的 DateTimeIndex

我有这样一个数据框,其中包含两列时间戳:
在这里插入图片描述

In [12]: df = pd.DataFrame({"start_time": range(1380805471, 1380805481), "end_time" : range(1380805481, 1380805491)})

In [13]: df.ix[:,['start_time','end_time']]
Out[13]: 
   start_time    end_time
0  1380805471  1380805481
1  1380805472  1380805482
2  1380805473  1380805483
3  1380805474  1380805484
4  1380805475  1380805485
5  1380805476  1380805486
6  1380805477  1380805487
7  1380805478  1380805488
8  1380805479  1380805489
9  1380805480  1380805490

我想将这些时间戳转换为人类可读的时间进行显示。目前,我正在使用以下方法:

In [15]: import datetime as dt

In [16]: df['start_time'] = [dt.datetime.fromtimestamp(t) for t in df.start_time]

In [17]: df['end_time'] = [dt.datetime.fromtimestamp(t) for t in df.end_time]

In [18]: df.ix[:,['start_time','end_time']]
Out[18]: 
           start_time            end_time
0 2013-10-03 18:34:31 2013-10-03 18:34:41
1 2013-10-03 18:34:32 2013-10-03 18:34:42
2 2013-10-03 18:34:33 2013-10-03 18:34:43
3 2013-10-03 18:34:34 2013-10-03 18:34:44
4 2013-10-03 18:34:35 2013-10-03 18:34:45
5 2013-10-03 18:34:36 2013-10-03 18:34:46
6 2013-10-03 18:34:37 2013-10-03 18:34:47
7 2013-10-03 18:34:38 2013-10-03 18:34:48
8 2013-10-03 18:34:39 2013-10-03 18:34:49
9 2013-10-03 18:34:40 2013-10-03 18:34:50

我的问题是,是否有专门的 pandas 方法可以做到这一点,而不需要使用列表推导式?或者,除了使用 DateTimeIndexlocalize 方法将列转换为所需时区之外,还有没有其他方法可以处理时间戳?

2、解决方案

  1. 使用 pd.to_datetime 函数

你可以使用 pd.to_datetime 函数将时间戳值转换为日期时间对象。

df['start_time'] = pd.to_datetime(df['start_time'], unit='s')
df['end_time'] = pd.to_datetime(df['end_time'], unit='s')

这将返回一个新的数据框,其中包含两个日期时间列。

In [6]: df
Out[6]: 
             end_time          start_time
0 2013-10-03 13:04:41 2013-10-03 13:04:41
1 2013-10-03 13:04:42 2013-10-03 13:04:42
2 2013-10-03 13:04:43 2013-10-03 13:04:43
3 2013-10-03 13:04:44 2013-10-03 13:04:44
4 2013-10-03 13:04:45 2013-10-03 13:04:45
5 2013-10-03 13:04:46 2013-10-03 13:04:46
6 2013-10-03 13:04:47 2013-10-03 13:04:47
7 2013-10-03 13:04:48 2013-10-03 13:04:48
8 2013-10-03 13:04:49 2013-10-03 13:04:49
9 2013-10-03 13:04:50 2013-10-03 13:04:50

你可以在数据框上调用 dt 属性来访问日期时间对象的属性和方法。例如,你可以使用 dt.hour 属性来获取小时。

df['start_time'].dt.hour
Out[7]: 
0    13
1    13
2    13
3    13
4    13
5    13
6    13
7    13
8    13
9    13
Name: start_time, dtype: int64
  1. 使用 apply 函数

你也可以使用 apply 函数来将函数应用到数据框的每一行。例如,你可以使用以下代码将 datetime.fromtimestamp 函数应用到 start_time 列的每一行。

df['start_time'] = df['start_time'].apply(lambda x: dt.datetime.fromtimestamp(x))

这将返回一个新的数据框,其中包含一个日期时间列。

In [6]: df
Out[6]: 
                    start_time            end_time
0 2013-10-03 18:34:31+00:00  2013-10-03 18:34:41+00:00
1 2013-10-03 18:34:32+00:00  2013-10-03 18:34:42+00:00
2 2013-10-03 18:34:33+00:00  2013-10-03 18:34:43+00:00
3 2013-10-03 18:34:34+00:00  2013-10-03 18:34:44+00:00
4 2013-10-03 18:34:35+00:00  2013-1
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值