python - Convert Pandas dateTime Index Values to Numpy Datetimes
问题描述
Starting with a pandas Dataframe with datetimes as the index, I create 2 lists:
- datetimes of all rows
- dates of all rows
My code below works but is slow. Is there a faster way of doing this? I have tried multiple approaches but all are slow.
dateTimeFormat = '%Y-%m-%dT%H:%M:%S'
barDates = []
barDateTimes = []
for numpyDatetime64 in bars.index.values: # 'bars' is a pandas dataframe
dateTime = datetime.datetime.strptime(str(numpyDatetime64).split('.')[0], dateTimeFormat)
date = dateTime.date()
barDateTimes.append(dateTime)
barDates.append(date)
Per Andrej's suggestion, here is an example of the input dataframe:
A B C ... T U V
dateTime ...
2010-05-13 09:31:00 117.130 117.240 117.13 ... 121.2400 121.2500 172429.0
2010-05-13 09:32:00 117.180 117.220 117.16 ... 121.1800 121.2700 98480.0
2010-05-13 09:33:00 117.200 117.280 117.19 ... 121.2701 121.3100 41255.0
2010-05-13 09:34:00 117.200 117.220 117.01 ... 121.2700 121.3999 250893.0
2010-05-13 09:35:00 117.100 117.130 116.83 ... 121.2500 121.2505 69952.0
... ... ... ... ... ... ... ...
2019-10-04 15:56:00 294.330 294.560 294.33 ... 141.7713 141.7800 15407.0
2019-10-04 15:57:00 294.550 294.630 294.50 ... 141.7750 141.7900 16815.0
2019-10-04 15:58:00 294.515 294.520 294.40 ... 141.7950 141.8700 39316.0
2019-10-04 15:59:00 294.485 294.530 294.38 ... 141.8600 141.8800 46623.0
2019-10-04 16:00:00 294.515 294.515 294.31 ... 141.8500 141.9300 89639.0
解决方案
以下代码可能会起作用:
import pandas as pd
ix = pd.date_range(start="2010-05-13 09:31:00", end="2010-05-13 09:35:00", freq='min')
ix
DatetimeIndex(['2010-05-13 09:31:00', '2010-05-13 09:32:00',
'2010-05-13 09:33:00', '2010-05-13 09:34:00',
'2010-05-13 09:35:00'],
dtype='datetime64[ns]', freq='T')
barDateTimes, barDates = ix.to_pydatetime().tolist(), ix.date.tolist()
barDateTimes, barDates
([datetime.datetime(2010, 5, 13, 9, 31),
datetime.datetime(2010, 5, 13, 9, 32),
datetime.datetime(2010, 5, 13, 9, 33),
datetime.datetime(2010, 5, 13, 9, 34),
datetime.datetime(2010, 5, 13, 9, 35)],
[datetime.date(2010, 5, 13),
datetime.date(2010, 5, 13),
datetime.date(2010, 5, 13),
datetime.date(2010, 5, 13),
datetime.date(2010, 5, 13)])
您可能还需要考虑是否真的需要 Python 日期时间和 Pandas 时间戳。
推荐阅读
- grpc - Python gRPC 健康检查
- asp.net-mvc - IIS 10 上的并发文件上传永远不会成功并冻结用户会话
- javascript - 为什么 mobx 中的 es6 装饰器不能正常工作?
- c# - 将 csv 导入 mysql 数据库 - 如何读取带有波兰语字符的文件?
- wget - 在 opam 中跳过 wget 证书检查
- javascript - insertHTML 在 contentEditable div 中插入 Div 不会使其可拖动或调整大小
- c# - 用户名或密码不正确-8009030C:LdapErr:DSID-0C090579,注释:AcceptSecurityContext错误,数据52e,v3839
- javascript - 如何将 ReadableStream 转换为 Readable
- java - Java 客户端使用 JMS 连接到 IBM MQ 通道的 TCP/IP 抛出错误
- python - 带有 __new__ 的单例模式在 python 2 中不起作用