将字符串转换为Python的日期时间

0 投票
2 回答
14182 浏览
提问于 2025-04-18 07:49

我想知道如果我从一个 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 中将字符串加载为日期时间 这个标题会更准确。

撰写回答