【问题标题】:how can I solve python numpy date and time ValueError如何解决 python numpy 日期和时间 ValueError
【发布时间】:2017-12-16 16:52:17
【问题描述】:

我有这几行代码:

import numpy as np
f = open("scikit.csv")
f.readline() # skip the header
data = np.loadtxt(f, delimiter=",")

scikit.csv 的前 5 行如下所示:

Date,Time,CPUUtilization_Average,CPUUtilization_Target,NetworkIn_Average,NetworkIn_Target,NetworkOut_Average,NetworkOut_Target,MemoryUtilization_Average,MemoryUtilization_Target,Final_Target,Final_Class
2017-12-07,16:55:00,17.0,low,0.0,low,0.0,low,5.47756198097301,low,10.312904877501694,low
2017-12-07,16:56:00,11.0,low,0.0,low,0.0,low,34.1503819977678,low,22.492003834477718,low
2017-12-07,16:57:00,3.0,low,0.0,low,0.0,low,34.2944535011255,low,19.045624937577248,low
2017-12-07,16:58:00,2.0,low,0.0,low,0.0,low,34.2875445714863,low,18.601948615438673,low

我想使用sklearn 库,因为我的数据集是外部的,所以我尝试使用与this (Loading from external datasets) 指南相关的numpy
但是当我想在 np.loadtxt("scikit.csv", delimiter=",") 中使用 numpy 将我的 CSV 转换为 Python 对象时会出错。

它会显示这个错误:

ValueError: could not convert string to float: Date

如果我像这样更改代码:

data = np.loadtxt(f, delimiter="," ,dtype="datetime64")

它将在time 列上显示另一个错误,如下所示:

ValueError: Error parsing datetime string "Date" at position 0

您能指导我如何在DateTime 列上解决这个问题吗?
没有强制使用numpy

【问题讨论】:

  • 跳过第一行。您试图解析标题。您试图将每个字段解析为日期时间。
  • @digitalsentinel 没有标题的相同错误
  • 对吗?也许首先尝试将单个日期时间转换为 date64
  • @digitalsentinel 怎么样?
  • 您在此示例数据中混合了多种数据类型(日期、字符串、浮点数)。当您指定 dtype="datetime64" 时,您正在为整个数据集转换此数据类型。还可以查看 numpy 的 genfromtxt

标签: python csv numpy scikit-learn


【解决方案1】:

numpy的使用方式:

import time

import numpy as np
import dateutil.parser as dparser

print('option 1')
print(np.loadtxt('scikit.csv', dtype='object', skiprows=1, delimiter=',',
          converters={0: np.datetime64,
                              1: dparser.parse}))

print('option 2')
print(np.loadtxt('scikit.csv', dtype='object', skiprows=1, delimiter=',',
          converters={0: np.datetime64,
                              1: lambda t: time.strptime(t.decode('utf-8'),
                                                         '%H:%M:%S')}))

print('option 3')
print(np.loadtxt('scikit.csv', dtype='object', skiprows=1, delimiter=','))

使用熊猫:

import pandas as pd
df = pd.read_csv('scikit.csv', parse_dates=['Date', 'Time'])
                 #converters={'Date': np.datetime64, 'Time': lambda t: pd.to_datetime(t, format='%H:%M:%S')})

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2020-01-22
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多