继续我之前的问题,时间数据与提供的格式(python - ValueError: time data does not match format)不匹配,我需要帮助将字符串转换为数据。
我从here下载了我的CSV文件。它有一个标题行和7列,第一列代表日期,其他代表数字。
转换为列表的第一个数据行如下所示:
['2010-06-29', '19.000000', '25.000000', '17.540001', '23.889999', '23.889999', '18766300']
我希望能够从中得到一个numpy数组:
import csv
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import urllib
def bytespdate2num(fmt, encoding="utf-8"):
strconverter = mdates.strpdate2num(fmt)
def bytesconverter(b):
s = b.decode(encoding)
return strconverter(s)
return bytesconverter
with open("TSLA.CSV", "r") as csvfile:
stock_price = csv.reader(csvfile, delimiter=",")
stock_price = list(stock_price)
date, closep, highp, lowp, openp, volume = np.loadtxt(stock_price,
delimiter = ",",
unpack = True,
skiprows=1,
# '2010-06-29'
converters={0: bytespdate2num("['%Y-%m-%d'")}
)
麻烦的是,我收到以下错误:
ValueError:时间数据“['2010-06-29”与格式'%Y-%m-%d'不匹配
问题是日期之前的['
。我尝试迭代列中的项目并替换['with“”;没用。然后我尝试给格式"['%Y-%m-%d'"
只是为了看看会发生什么。这解决了这个错误(当然,我对这个解决方案不满意),但还有另一个错误:
ValueError:无法将字符串转换为float:b'18766300.0]'
我在谷歌上搜索并搜索但却一无所获......
答案 0 :(得分:0)
numpy
可以按如下方式使用:
from datetime import datetime
import matplotlib.dates as mdates
import numpy as np
def bytespdate2num(x):
return mdates.date2num(datetime.strptime(x, '%Y-%m-%d'))
df = np.genfromtxt('TSLA.csv', delimiter=',', skip_header=1, converters={0: bytespdate2num}, dtype='int')
你需要决定一个合适的类型来存储所有数字。虽然Pandas可能是一个更好的匹配。
df
将显示为:
[( 733952., 19, 25, 17, 23, 23, 18766300)
( 733953., 25, 30, 23, 23, 23, 17187100)
( 733954., 25, 25, 20, 21, 21, 8218800) ...,
( 736573., 356, 357, 353, 355, 355, 3049500)
( 736577., 353, 355, 345, 349, 349, 3835100)
( 736578., 349, 350, 341, 344, 344, 4079000)]
答案 1 :(得分:-1)
您可以按如下方式使用pandas库:
import pandas as pd
dataset = pd.read_csv("TSLA.CSV")
date = dataset['Date']
# etc.