python - 在字符串列表上使用 strptime()。不能使用循环

标签 python datetime typeerror strptime

我有一个字符串列表(unicode)。像这样:

>>> tstamp
[u'2017-08-08T08:51:20.465Z', u'2017-08-08T08:51:27.871Z', u'2017-08-08T08:51:33.399Z', u'2017-08-08T08:51:37.530Z', u'2017-08-08T08:51:47.248Z', u'2017-08-08T08:51:50.414Z', u'2017-08-08T08:51:54.707Z', u'2017-08-08T08:51:54.781Z']

我想将这个字符串列表转换为日期时间对象列表。像这样:

>>> dtstamp
[datetime.datetime(2017, 8, 8, 8, 51, 20, 465000), datetime.datetime(2017, 8, 8, 8, 51, 27, 871000), datetime.datetime(2017, 8, 8, 8, 51, 33, 399000), datetime.datetime(2017, 8, 8, 8, 51, 37, 530000), datetime.datetime(2017, 8, 8, 8, 51, 47, 248000), datetime.datetime(2017, 8, 8, 8, 51, 50, 414000), datetime.datetime(2017, 8, 8, 8, 51, 54, 707000), datetime.datetime(2017, 8, 8, 8, 51, 54, 781000)]

我的解决方案非常粗糙,我希望无需使用任何类型的循环即可进行此转换。转换速度至关重要。到目前为止,这是我的代码:

dtstamp = [0]*len(tstamp)
for i in range(0,len(tstamp)):
     dtstamp[i] = datetime.datetime.strptime(tstamp[i], '%Y-%m-%dT%H:%M:%S.%fZ')

它做我想做的事,但会很慢。我考虑过尝试这个,但行不通:

dtstamp = datetime.datetime.strptime(tstamp, '%Y-%m-%dT%H:%M:%S.%fZ')

任何人都可以指出我正确的方向吗?

提前致谢!

最佳答案

您只需按原样在列表上使用 pd.to_datetime 即可获得显着的加速。但是,我认为即使您可以调整方法,您也不会因此达到每秒 600,000 次转换。

import pandas as pd
import datetime as dt

my_list = [u'2017-08-08T08:51:20.465Z', u'2017-08-08T08:51:27.871Z', u'2017-08-08T08:51:33.399Z', u'2017-08-08T08:51:37.530Z', u'2017-08-08T08:51:47.248Z', u'2017-08-08T08:51:50.414Z', u'2017-08-08T08:51:54.707Z', u'2017-08-08T08:51:54.781Z']
new_list = []
for x in xrange(100000):
    new_list.extend(my_list)

def basic_list_approach(the_list):
    return [dt.datetime.strptime(item, '%Y-%m-%dT%H:%M:%S.%fZ') for item in the_list]

def pandas_approach(the_list):
    converted = pd.to_datetime(the_list)
    return converted

%timeit basic_list_approach(new_list)
1 loop, best of 3: 12.6 s per loop

%timeit pandas_approach(new_list)
1 loop, best of 3: 1.45 s per loop

关于python - 在字符串列表上使用 strptime()。不能使用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45567502/

相关文章:

c# - 如何使用非托管导出 (Robert Giesecke) 将 dateTime 类型数组从 .NET 传递到 Delphi?

python - "TypeError: ' 在函数签名中输入 ' object is not subscriptable"

python - 从句子列表中删除单词列表的简单方法是什么?

python - 将时间序列转入面板...python

python - Django - 在带注释的查询中访问外键数据

python - 返回自定义时间戳

javascript - Angular 计时器 - .stop() 和 .resume() 问题

日期转换的 Python Pandas 问题

python - Plone 3.1.2 - ATDocument.getText() 方法中的类型错误

compiler-errors - 此表达式的类型为 a*b*c 但应为 int 类型