如@jonrhsarpe在他的回答中所说,您可以使用ast.literal_eval
将字符串转换为元组,然后将其解压缩到字符串中。
但根据以下测试,似乎更快的方法仍然是使用datetime.datetime.strptime()
。 例如 -
代码 -
import datetime
import ast
def func1(datestring):
return datetime.datetime(*ast.literal_eval(datestring))
def func2(datestring):
return datetime.datetime.strptime(datestring, '(%Y, %m, %d, %H, %M, %S)')
时间信息 -
In [39]: %timeit func1("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 30.1 µs per loop
In [40]: %timeit func2("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 26.9 µs per loop
In [41]: %timeit func1("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 38.6 µs per loop
In [42]: %timeit func2("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 28.8 µs per loop
In [43]: %timeit func1("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 31.2 µs per loop
In [44]: %timeit func2("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 29.5 µs per loop
In [45]: %timeit func1("(2011, 12, 11, 15, 45, 20)")
The slowest run took 5.51 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 32.6 µs per loop
In [46]: %timeit func2("(2011, 12, 11, 15, 45, 20)")
The slowest run took 15.42 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 27.5 µs per loop
In [47]: %timeit func1("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 49.2 µs per loop
In [48]: %timeit func2("(2011, 12, 11, 15, 45, 20)")
10000 loops, best of 3: 24.4 µs per loop
我不确定你从哪里得到了datetime.datetime.strptime()
是反直觉的信息,但是对于将字符串解析为日期时间对象,我会建议使用strptime()
。
ast.literal_eval
将字符串转换为整数元组,然后将其直接解包到datetime
构造函数中:datetime.datetime(*literal_eval(row[1]))
。 - jonrsharpepandas
吗?另外,将字符串存储在更易于解析的格式中是否更有意义? - EdChum