【发布时间】:2016-03-13 10:11:24
【问题描述】:
我有以下 Pandas 系列,并希望获得该日期的 GPS 周数:
import pandas as pd
from pandas import Timestamp
times = pd.Series([Timestamp('2015-11-27 00:00:00.540000'), Timestamp('2015-11-27 00:00:00.699000'), Timestamp('2015-11-27 00:00:01'), Timestamp('2015-11-27 00:00:01.699000'), Timestamp('2015-11-27 00:00:02.699000')])
In [116]: times
Out[116]:
0 2015-11-27 00:00:00.540
1 2015-11-27 00:00:00.699
2 2015-11-27 00:00:01.000
3 2015-11-27 00:00:01.699
4 2015-11-27 00:00:02.699
Name: GMT, dtype: datetime64[ns]
当我尝试减去 GPS 纪元开始的日期并获得总秒数时:
gps_epoch = datetime.datetime(1980, 1, 6)
delta = times - gps_epoch
In [120]: delta
Out[120]:
0 13109 days 00:00:00.540000
1 13109 days 00:00:00.699000
2 13109 days 00:00:01
3 13109 days 00:00:01.699000
4 13109 days 00:00:02.699000
Name: GMT, dtype: timedelta64[ns]
我正在尝试为该系列映射total_seconds,但我遇到了一个错误:
In [124]: delta.map(lambda x: x.total_seconds())
AttributeError: 'numpy.timedelta64' object has no attribute 'total_seconds'
但是当我尝试获取第一个元素的总秒数时,一切都很好:
In [130]: delta[0].total_seconds()
Out[130]: 1132617600.54
然后,为了获得 GPS 周数,我可以执行以下操作:
In [135]: np.floor(delta[0].total_seconds()/86400/7)
Out[135]: 1872.0
我已经检查了这两种情况的类型,它们是不同的..:
In [137]: type(delta[0])
Out[137]: pandas.tslib.Timedelta
In [138]: delta.map(lambda x: type(x))
Out[138]:
0 <class 'numpy.timedelta64'>
1 <class 'numpy.timedelta64'>
2 <class 'numpy.timedelta64'>
3 <class 'numpy.timedelta64'>
4 <class 'numpy.timedelta64'>
Name: GMT, dtype: object
为什么它不能使用map 方法以及为什么类型不同?
【问题讨论】:
-
delta.dt.total_seconds()不工作吗?
标签: python datetime numpy pandas timedelta