Новичок Матплотлиб и Pandas Plotting из файла CSV - PullRequest
0 голосов
/ 17 декабря 2018

У меня совсем не было тренировок с Matplotlib, и это действительно похоже на простое приложение для черчения, но я получаю только ошибки.

Используя Python 3, я просто пытаюсьпостроить исторические данные о ценах на акции из файла CSV, используя дату в качестве оси X и цены в качестве Y.Данные CSV выглядят так:

data

(только сейчас замечают большой разрыв во времени, но неважно)

import glob
import pandas as pd
import matplotlib.pyplot as plt

def plot_test():
    files = glob.glob('./data/test/*.csv')

    for file in files:
        df = pd.read_csv(file, header=1, delimiter=',', index_col=1)
        df['close'].plot()
        plt.show()

plot_test()

Сейчас я использую glob просто для идентификации любого CSV-файла в этой папке, но я также попытался указать одно конкретное имя файла CSV и получить ту же ошибку:

KeyError: 'close'

Я также пыталсяпросто назначив конкретный номер столбца, чтобы вместо этого построить только один конкретный столбец, но я не знаю, что происходит.

В идеале, я хотел бы построить его так же, как реальные данные о запасах, где все по-прежнемуграфик, объем внизу по своей оси, открытие верхнего минимума при закрытии по оси y и дата по оси x для каждой строки в файле.Я пробовал несколько разных решений, но не могу понять это.Я знаю, что, возможно, об этом уже спрашивали, но я пробовал много разных решений от SO и других, но мое, похоже, зависло от меня.Большое спасибо за помощь новичка!

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы можете сделать это в соответствии с вашими потребностями

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()

enter image description here

0 голосов
/ 17 декабря 2018

Здесь, в документации для панд , вы можете найти, что header kwarg должен быть 0 для вашего csv, так как первая строка содержит имена столбцов.Происходит то, что созданный вами DataFrame не имеет столбца close, поскольку он берет заголовки из «второй» строки.Вероятно, он будет работать нормально, если вы возьмете header kwarg или измените его на header=0.То же самое и с другими kwargs, нет необходимости определять их.Простой df = pd.read_csv(file) подойдет просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...