我正在尝试从某些文件中加载时间序列数据。数据具有此格式
04/02/2015 19:07:53.951,3195,1751,-44,-25
我正在使用此代码将整个文件作为numpy对象加载。
content = np.loadtxt(filename, dtype={'names': ('timestamp', 'tick', 'ch', 'NodeI', 'Base'),
'formats': ('datetime64[us]', 'i4', 'i4', 'i4', 'i4')}, delimiter=',', skiprows=27)
但是我的日期时间格式错误
ValueError: Error parsing datetime string "04/02/2015 19:07:53.951" at position 2
有一种简单的方法可以定义我正在阅读的日期时间格式吗?有大量数据的文件所以我试图不要多次遍历文件。
答案 0 :(得分:2)
使用converters
参数将转换器函数应用于第一列的数据:
import datetime
def parsetime(v):
return np.datetime64(
datetime.datetime.strptime(v, '%d/%m/%Y %H:%M:%S.%f')
)
content = np.loadtxt(
filename,
dtype={
'names': ('timestamp', 'tick', 'ch', 'NodeI', 'Base'),
'formats': ('datetime64[us]', 'i4', 'i4', 'i4', 'i4')
},
delimiter=',',
skiprows=27,
converters={0: parsetime},
)
我假设您的数据文件正在使用D/M/Y
,如果您使用的是M/D/Y
,请相应地调整格式字符串。
答案 1 :(得分:2)
我建议使用pandas库和read_csv
,您可以使用parse_dates
选择列并设置infer_datetime_format
将其转换为日期时间格式:
import pandas as pd
a=pd.read_csv('nu.txt',parse_dates=[0],infer_datetime_format=True,sep=',',header=None)
a.iloc[:,0]
0 2015-04-02 19:07:53.951
1 2015-04-02 19:07:53.951
2 2015-04-02 19:07:53.951
3 2015-04-02 19:07:53.951
Name: 0, dtype: datetime64[ns]
# assumes file with four identical rows and no header
此外,如果需要,很容易转换为numpy:
b=np.array(a)
array([[Timestamp('2015-04-02 19:07:53.951000'), 3195L, 1751L, -44L, -25L],
[Timestamp('2015-04-02 19:07:53.951000'), 3195L, 1751L, -44L, -25L],
[Timestamp('2015-04-02 19:07:53.951000'), 3195L, 1751L, -44L, -25L],
[Timestamp('2015-04-02 19:07:53.951000'), 3195L, 1751L, -44L, -25L]], dtype=object)