Wykres. Problem z Date_Time

0

Witam. Mam problem z pokazaniem wykresu. W załączniku są dane oraz przynajmniej jak ma wszystko wyglądać. Mój program:

import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as dates

data_pd = pd.read_csv('appl.csv', parse_dates=[['Date', 'Time']])
format = '%m/%d/%Y %H'
data_pd = data_pd.set_index(data_pd['Date_Time'])
data_pd['Date_Time'] = pd.to_datetime(data_pd['Date_Time'], format = format)
data_pd = data_pd.set_index(data_pd['Date_Time'])
data_pd = data_pd.drop(columns = ['Date_Time'])

def moving_average(data, period):
    sumdf = data['Close'].cumsum(axis=0)
    average = (sumdf.values[period - 1:] - sumdf.values[: -period + 1] + data['Close'].values[: -period + 1])/period
    return average

averages1 = moving_average(data_pd, 4)
averages2 = moving_average(data_pd, 14)

fig = plt.figure(figsize=(15,9))
fig.add_axes()
ax = fig.add_subplot(111)
plt.plot(data_pd['Date_Time'], data_pd['Close'], color='red', label="APPL data", linewidth=1)
plt.plot(data_pd['Date_Time'], averages1, color='blue', label="4 days MA", linewidth=1)
plt.plot(data_pd['Date_Time'], averages2, color='black', label="14 days MA", linewidth=1)
ax.xaxis.grid(True, which='minor')
date_formatter = dates.DateFormatter('m/%d/%Y %H')
ax.xaxis.set_major_locator(dates.DayLocator(interval=5))
ax.xaxis.set_major_formatter(date_formatter)
plt.setp(ax.xaxis.get_majorticklabels(), rotation=90, fontsize=7)
plt.title("AAPL daily moving averages")
ax.set(title='AAPL daily moving averages', ylabel='Price', xlabel='Data')
plt.legend(loc='upper left')
plt.grid()
plt.show()

Moje błędy:



Traceback (most recent call last):
  File "C:\Users\Beata\PycharmProject\1\venv\lib\site-packages\pandas\core\indexes\base.py", line 3078, in get_loc
    return self._engine.get_loc(key)
  File "pandas\_libs\index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Date_Time'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/Beata/PycharmProject/1/1.py", line 27, in <module>
    plt.plot(data_pd['Date_Time'], data_pd['Close'], color='red', label="APPL data", linewidth=1)
  File "C:\Users\Beata\PycharmProject\1\venv\lib\site-packages\pandas\core\frame.py", line 2688, in __getitem__
    return self._getitem_column(key)
  File "C:\Users\Beata\PycharmProject\1\venv\lib\site-packages\pandas\core\frame.py", line 2695, in _getitem_column
    return self._get_item_cache(key)
  File "C:\Users\Beata\PycharmProject\1\venv\lib\site-packages\pandas\core\generic.py", line 2489, in _get_item_cache
    values = self._data.get(item)
  File "C:\Users\Beata\PycharmProject\1\venv\lib\site-packages\pandas\core\internals.py", line 4115, in get
    loc = self.items.get_loc(item)
  File "C:\Users\Beata\PycharmProject\1\venv\lib\site-packages\pandas\core\indexes\base.py", line 3080, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas\_libs\index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Date_Time'

Process finished with exit code 1

1

KeyError: 'Date_Time'
W sumie to ci wywala błąd co konkretnie jest zrobione źle :).
'Date_Time' nie istnieje w linii:
plt.plot(data_pd['Date_Time'], data_pd['Close'], color='red', label="APPL data", linewidth=1)
Jest to 27 linia pliku.

Linie <11, 13> z załączonego kodu:

data_pd['Date_Time'] = pd.to_datetime(data_pd['Date_Time'], format = format)
data_pd = data_pd.set_index(data_pd['Date_Time'])
data_pd = data_pd.drop(columns = ['Date_Time'])

W powyższym kodzie tworzysz kolumnę 'Date_Time' w pierwszej linii zaś dwie linie niżej (trzecia w tym fragmencie), dropujesz kolumnę, więc nie ma prawa istnieć niżej, zwłaszcza że nie tworzysz jej ponownie :).
Wywal trzecią linię z tego fragmentu i spróbuj co będzie dalej :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1