2017-09-07 34 views
0

继续我以前的问题与时间数据不符合提供的格式(python - ValueError: time data does not match format),我需要帮助将字符串转换为数据。我下载了CSV文件here。它有一个标题行和7列,其中第一个表示日期,其他数字。蟒蛇 - 从csv字符串转换为日期和浮点格式

转换成列表首先,数据线看起来是这样的:

['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: time data "['2010-06-29" does not match format '%Y-%m-%d'

问题是日期前的['。我尝试迭代列中的项目,并用[';'替换[';没有工作。然后我试图给出格式"['%Y-%m-%d'"只是为了看看会发生什么。这让周围的错误(虽然我不开心与解决方案,当然),但有另一个问题:

ValueError: could not convert string to float: b' 18766300.0]'

我一派,这里搜查,但一无所获......

+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') 

您将需要一个合适的类型决定的所有号码存储在熊猫很可能是一个更好的比赛,虽然:可作如下用途。

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

您可以使用熊猫库如下:

import pandas as pd 
dataset = pd.read_csv("TSLA.CSV") 

date = dataset['Date'] 
# etc. 

参考:pandas.read_csv