2017-09-27 37 views
0

我是matplotlib的新手,需要一些指导。我试图从“来自Pandas DataFrame的烛台图”中重现这段代码,作为通过添加“read_csv”函数来学习的一种方式。来自熊猫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

嗨重要性,我对缺乏信息表示歉意。在最初的几个记录的读取是日期开盘价最高价最低价收盘价 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

全错误消息是“完整的错误信息是”raceback(最近调用最后一次): 文件“/用户/保罗/文件/ python(原始)/定量/蜡烛棒图从stackoverflow v4.py”,第17行,在 df_ohlc.columns = [“Date”,“Open”,“High”,“Low”,“Close”] 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site- packages/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'])

编辑:
如果您在您的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