2017-09-07 80 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