2017-09-27 19 views
0

私はmatplotlibを初めて使用しており、何かガイダンスが必要です。私は、 "read_csv"関数を追加することで学ぶ方法として、このコードを "Pandas DataFrameのCandlestick Plot"から再現しようとしています。Pandas DataFrameの燭台の再試行

私のエラーメッセージが「ValueErrorをを:長さの不一致:期待軸が6つの要素を持って、新しい値は、5つの要素を持っている」と言っておく

を私の質問は以下のとおりです。

  1. 私はコードで何をしないのですか?私はcvsを読んで、私はデータの正しい列を使用し、インデックスのリセットがあることを理解していますが、なぜエラーが発生するのかはわかりません。

お願いします。

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker as mticker 
from mpl_finance import candlestick_ohlc 
import matplotlib.dates as mdates 
import datetime as dt 


df = pd.read_csv("/Users/paul/Documents/python  (original)/Quant/sp500.csv", usecols=['Date', 'Open','High','Low','Close']) 


#Reset the index to remove Date column from index 
df_ohlc = df.reset_index() 


#Naming columns 
df_ohlc.columns = ["Date","Open","High",'Low',"Close"] 

#Converting dates column to float values 
df_ohlc['Date'] = df_ohlc['Date'].map(mdates.date2num) 

#Making plot 
fig = plt.figure() 
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=6, colspan=1) 

#Converts raw mdate numbers to dates 
ax1.xaxis_date() 
plt.xlabel("Date") 
print(df_ohlc) 

#Making candlestick plot 
candlestick_ohlc(ax1,df_ohlc.values,width=1, colorup='g',  colordown='k',alpha=0.75) 
plt.ylabel("Price") 
plt.legend() 

plt.show() 
+0

スクリプトのどの行でエラーが発生しますか?完全なエラートレースバックを提供してください。入力ファイルについての情報はありません。 ([mcve]を参照してください)だから誰も問題を再現できないので、ここで答えを得ることはできません。 – ImportanceOfBeingErnest

+0

こんにちは、ImportanceOfBeingErnest、私は情報の不足をお詫び申し上げます。最初の数レコードのリードは日オープン高い低いを閉じる 0 2015年9月22日1961.390015 1961.390015 1929.219971 1942.739990 1 2015年9月23日1943.239990 1949.520020 1932.569946 1938.760010 2 2015年9月24日1934.810059 1937.170044 1908.920044 1932.239990 – fishtang

+0

いっぱいです"完全なエラーメッセージは"完全なエラーメッセージです。 "ファイル" /ユーザー/ paul /ドキュメント/ Python(元の)/ Quant/candleスティックチャートからstackoverflow v4.py "、行17、 df_ohlc.columns = ["Date"、 "Open"、 "High"、 "Low"、 "Close"] ファイル "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-パッケージ/ pandas/core/generic.py "、行3094、 – fishtang

答えて

2

.csvファイルの各行の前に "0"、 "1"、 "2"は必要ありません。あなたは、まずそれを削除しなければなりません:

  • をあなたはインデックスをリセットするつもりなら、あなたはあなたのデータフレーム内の実際のインデックス列を必要とするので、このようなindex_colを追加:
    df = pd.read_csv("/Users/paul/Documents/python (original)/Quant/sp500.csv", usecols=['Date', 'Open','High','Low','Close'], index_col= 'Date')

  • 変換文字列から日付時刻にあなたの日付列: df_ohlc['Date'] = pd.to_datetime(df_ohlc['Date'])

EDIT:
あなたの場合それは大きすぎるので、あなたのcsvファイルで0、1、2 ...列を削除することはできません、「インデックス」列は次のように表示させるために最初の行を変更します。で、
'index', 'Date', 'Open','High','Low','Close'

次に、あなたのコード:

df = pd.read_csv("/Users/paul/Documents/python  (original)/Quant/sp500.csv", usecols=['index', 'Date', 'Open','High','Low','Close'], index_col="Date") 
df.drop('index', axis=1, inplace=True) 
+0

私は両方からのポインタをありがとう。私は列を一致させる方法を考えていた。私はすべての関数を読み直していましたが、df = pd.read_csv( "/ Users/paul/Documents/python(original)/Quant/sp500.csv"、index_col = 'Date'、parse_dates = True、usecols = [日付]、[開く]、[高]、[低]、[閉じる]])。出来た。 – fishtang

関連する問題