Python 新手Matplotlib和熊猫从CSV文件打印

Python 新手Matplotlib和熊猫从CSV文件打印,python,python-3.x,pandas,csv,matplotlib,Python,Python 3.x,Pandas,Csv,Matplotlib,我没有接受过太多Matplotlib的培训,这看起来真的像是一个基本的绘图应用程序,但我得到的只是错误 使用Python3,我只是尝试从CSV文件中绘制历史股价数据,使用日期作为x轴,价格作为y轴。数据CSV如下所示: (只是刚刚注意到时间差距很大,但不管怎样) 我现在使用glob只是为了识别该文件夹中的任何CSV文件,但我也尝试了指定一个特定的CSV文件名,并得到相同的错误: KeyError: 'close' 我也尝试过只指定一个特定的列号来只绘制一个特定的列,但我不知道发生了什么 理想

我没有接受过太多Matplotlib的培训,这看起来真的像是一个基本的绘图应用程序,但我得到的只是错误

使用Python3,我只是尝试从CSV文件中绘制历史股价数据,使用日期作为x轴,价格作为y轴。数据CSV如下所示:

(只是刚刚注意到时间差距很大,但不管怎样)

我现在使用glob只是为了识别该文件夹中的任何CSV文件,但我也尝试了指定一个特定的CSV文件名,并得到相同的错误:

KeyError: 'close'
我也尝试过只指定一个特定的列号来只绘制一个特定的列,但我不知道发生了什么


理想情况下,我会像绘制真实股票数据一样绘制它,其中所有数据都在同一个图表上,在它自己的轴上,底部的体积在它自己的轴上,在y轴上打开高-低-关闭,在x轴上为文件中的每一行绘制日期。我尝试过几种不同的解决方案,但似乎都没有找到答案。我知道以前可能有人问过这个问题,但我已经尝试了很多不同的解决方案,但我的似乎挂断了我的电话。非常感谢新手的帮助

在这里,您可以发现csv的
标题
kwarg应该是0,因为第一行包含列名。发生的情况是,您正在构建的数据帧没有列
close
,因为它从“第二”行获取标题。如果您使用
标题
kwarg或将其更改为
header=0
,它可能会正常工作。与其他KWARG相同,无需定义它们。一个简单的
df=pd.read\u csv(file)
就可以了。

在这里,你可以发现你的csv的
标题应该是0,因为第一行包含列名。发生的情况是,您正在构建的数据帧没有列
close
,因为它从“第二”行获取标题。如果您使用
标题
kwarg或将其更改为
header=0
,它可能会正常工作。与其他KWARG相同,无需定义它们。一个简单的
df=pd.read\u csv(文件)
就可以了。

您可以根据需要对其进行修饰

import pandas
import matplotlib.pyplot as plt

def plot_test(file):



    df = pandas.read_csv(file)

    # convert timestamp
    df['timestamp'] = pandas.to_datetime(df['timestamp'], format = '%Y-%m-%d %H:%M')



    # plot prices
    ax1 = plt.subplot(211)
    ax1.plot_date(df['timestamp'], df['open'], '-', label = 'open')
    ax1.plot_date(df['timestamp'], df['close'], '-', label = 'close')
    ax1.plot_date(df['timestamp'], df['high'], '-', label = 'high')
    ax1.plot_date(df['timestamp'], df['low'], '-', label = 'low')
    ax1.legend()

    # plot volume
    ax2 = plt.subplot(212)

    # issue: https://github.com/matplotlib/matplotlib/issues/9610
    df.set_index('timestamp', inplace = True)
    df.index.to_pydatetime()

    ax2.bar(df.index, df['volume'], width = 1e-3)
    ax2.xaxis_date()

    plt.show()

您可以根据需要对其进行美化

import pandas
import matplotlib.pyplot as plt

def plot_test(file):



    df = pandas.read_csv(file)

    # convert timestamp
    df['timestamp'] = pandas.to_datetime(df['timestamp'], format = '%Y-%m-%d %H:%M')



    # plot prices
    ax1 = plt.subplot(211)
    ax1.plot_date(df['timestamp'], df['open'], '-', label = 'open')
    ax1.plot_date(df['timestamp'], df['close'], '-', label = 'close')
    ax1.plot_date(df['timestamp'], df['high'], '-', label = 'high')
    ax1.plot_date(df['timestamp'], df['low'], '-', label = 'low')
    ax1.legend()

    # plot volume
    ax2 = plt.subplot(212)

    # issue: https://github.com/matplotlib/matplotlib/issues/9610
    df.set_index('timestamp', inplace = True)
    df.index.to_pydatetime()

    ax2.bar(df.index, df['volume'], width = 1e-3)
    ax2.xaxis_date()

    plt.show()

唉,工作起来很有魅力。我还根据您的建议更改了“index_col=0”,以确保它取X轴的第一列。真的很感激!非常感谢。呃,工作就像一个符咒。我还根据您的建议更改了“index_col=0”,以确保它取X轴的第一列。真的很感激!非常感谢。非常感谢你!我也喜欢这本书的第二个情节。我也会实施的,非常感谢!我也喜欢这本书的第二个情节。我也将实施这一点。