ale*_*cxe 13 python datetime date pandas pendulum
我最近偶然发现了一个新的令人敬畏的pendulum库,可以更轻松地使用日期时间.
在pandas,有这个方便的to_datetime()方法允许将系列和其他对象转换为日期时间:
raw_data['Mycol'] = pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')
创建自定义to_<something>方法的规范方法是什么- 在这种情况下to_pendulum(),能够将一系列日期字符串直接转换为Pendulum对象的方法?
这可能导致Series具有各种有趣的功能,例如,将一系列日期字符串转换为一系列"从现在开始的偏移" - 人类日期时间差异.
cs9*_*s95 16
创建自定义
to_<something>方法的规范方法是什么- 在这种情况下to_pendulum(),能够将一系列日期字符串直接转换为Pendulum对象的方法?
仔细阅读API之后,我必须说我对他们所做的事情印象深刻.不幸的是,我不认为Pendulum并且pandas可以一起工作(至少,使用当前的最新版本 - v0.21).
最重要的原因是pandas本机不支持Pendulum作为数据类型.所有原生支持的数据类型(np.int,np.float和np.datetime64)以某种形式都支持矢量化.使用数据帧,例如,一个vanilla循环和列表,你不会得到一丝性能提升.如果有的话,呼吁apply在Series  与Pendulum对象将是比较慢(因为所有的API开销).
另一个原因是它Pendulum是 - 的子类datetime-
from datetime import datetime
isinstance(pendulum.now(), datetime)
True
这很重要,因为如上所述,datetime是一种受支持的数据类型,因此pandas将尝试强制转换datetime为pandas的本机日期时间格式 - Timestamp.这是一个例子.
print(s)
0     2017-11-09 18:43:45
1     2017-11-09 20:15:27
2     2017-11-09 22:29:00
3     2017-11-09 23:42:34
4     2017-11-10 00:09:40
5     2017-11-10 00:23:14
6     2017-11-10 03:32:17
7     2017-11-10 10:59:24
8     2017-11-10 11:12:59
9     2017-11-10 13:49:09
s = s.apply(pendulum.parse)
s
0    2017-11-09 18:43:45+00:00
1    2017-11-09 20:15:27+00:00
2    2017-11-09 22:29:00+00:00
3    2017-11-09 23:42:34+00:00
4    2017-11-10 00:09:40+00:00
5    2017-11-10 00:23:14+00:00
6    2017-11-10 03:32:17+00:00
7    2017-11-10 10:59:24+00:00
8    2017-11-10 11:12:59+00:00
9    2017-11-10 13:49:09+00:00
Name: timestamp, dtype: datetime64[ns, <TimezoneInfo [UTC, GMT, +00:00:00, STD]>]
s[0]
Timestamp('2017-11-09 18:43:45+0000', tz='<TimezoneInfo [UTC, GMT, +00:00:00, STD]>')
type(s[0])
pandas._libs.tslib.Timestamp
因此,如果遇到一些困难(涉及dtype=object),您可以将Pendulum对象加载到数据框中.这是你如何做到的 - 
v = np.vectorize(pendulum.parse)
s = pd.Series(v(s), dtype=object)
s
0     2017-11-09T18:43:45+00:00
1     2017-11-09T20:15:27+00:00
2     2017-11-09T22:29:00+00:00
3     2017-11-09T23:42:34+00:00
4     2017-11-10T00:09:40+00:00
5     2017-11-10T00:23:14+00:00
6     2017-11-10T03:32:17+00:00
7     2017-11-10T10:59:24+00:00
8     2017-11-10T11:12:59+00:00
9     2017-11-10T13:49:09+00:00
s[0]
<Pendulum [2017-11-09T18:43:45+00:00]>
然而,这基本上是无用的,因为调用任何 pendulum方法(via apply)现在不仅会超级慢,而且最终会Timestamp再次被强制转换,这是徒劳的.
| 归档时间: | 
 | 
| 查看次数: | 1228 次 | 
| 最近记录: |