将字符串转换为Python的日期时间
我想知道如果我从一个 csv
文件中读取字符串 2014-05-19
,怎么把它转换成 Python
中的日期时间对象。目前,当我把 dtype 设置为 None 时,它会把 2014-05-19
读成字符串,而不是日期时间。
import numpy as np
import datetime
np.genfromtxt(inputFile, dtype=None,delimiter=' ')
文件
2014-05-19 10
2014-05-20 11
2014-05-21 12
2014-05-22 13.29
2014-05-23 12.1
这里字符串后面的数字是和日期相关的一个值,但并不包含在 datetime
对象里。
dataPoints = np.loadtxt(inputFile, dtype=None,delimiter=' ', converters = {0: datetime.datetime.strptime('%Y-%m-%d')})
我收到了以下信息:TypeError: strptime() takes exactly 2 arguments (1 given)
我该怎么指定格式,而不是真的去修改这个字符串呢?
2 个回答
0
你应该使用datetime模块里的strptime函数。我不太确定空格后面的数字应该是什么,但这个函数可以把年-月-日格式正确地转换成一个日期时间对象。
from datetime import datetime
some_date = '2014-05-28'
parsed_date = datetime.strptime(some_date, '%Y-%m-%d')
print(parsed_date)
4
如果你的数据里没有缺失值,可以用 numpy.loadtxt()
来加载数据。
numpy.genfromtxt()
也有一个叫做 converters 的参数。(谢谢 RickyA)
使用 'converters' 参数和 lambda 函数的方法如下:
from datetime import datetime
datestr2num = lambda x: datetime.strptime(x, '%Y-%m-%d')
np.genfromtxt(inputFile, delimiter=' ', converters = {0: datestr2num})
这里的 0
是指列的索引。
其实还有更简单的方法 - 使用 dtype 参数:
np.genfromtxt(inputFile, dtype=['datetime64[D]', float], delimiter=' ')
或者用更容易理解的方式,使用 ('列名', 类型) 的元组:
np.genfromtxt(inputFile, dtype=[('Date', 'datetime64[D]'),('Value', float)], delimiter=' ')
顺便说一下,我觉得 在 numpy 中将字符串加载为日期时间 这个标题会更准确。