У меня есть данные ниже, сохраненные как stockdata.csv
.
Date,Open,High,Low,Close
03-10-16,774.25,776.065002,769.5,772.559998
04-10-16,776.030029,778.710022,772.890015,776.429993
05-10-16,779.309998,782.070007,775.650024,776.469971
06-10-16,779,780.47998,775.539978,776.859985
07-10-16,779.659973,779.659973,770.75,775.080017
У меня есть 2 вопроса:
желаем создать линейный график с датой на оси x и другими 4 переменными на оси y.
У меня проблема с разделением даты и данных для получения желаемого результата.
Вот мой код:
import pandas as pd
df=pd.read_csv(r'C:\Users\stockdata.csv',parse_dates=True,index_col=0,header=0)
Это дает мне вывод ниже:
Empty DataFrame
Columns: []
Index: [03-10-16,774.25,776.065002,769.5,772.559998, 04-10-16,776.030029,778.710022,772.890015,776.429993, 05-10-16,779.309998,782.070007,775.650024,776.469971, 06-10-16,779,780.47998,775.539978,776.859985, 07-10-16,779.659973,779.659973,770.75,775.080017]
Выполняя pd.read_csv
, я видел все коды, непосредственно вводящие путь к файлу.
Но если я исключу префикс r
, он выдаст ошибку, как показано ниже:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Как написать код без упоминания режима чтения?
Edit1:
Проблема была с моим пониманием .csv. Я создавал .csv и помещал туда данные, включая запятые. Я обнаружил, что .csv будет отображаться без запятых в формате Excel CSV, но запятые появляются, когда тот же файл открывается в блокноте.
Мой окончательный код:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv(r"C:\Users\stockdata.csv",header=0,index_col=0,parse_dates=[0])
df.plot(y=['Open','High','Low','Close'])
plt.show()
Это обрабатывает дату в формате гггг-мм-дд и отображает 10 дат вместо ввода 5.
Нужно поэкспериментировать с библиотекой datetime
, чтобы исправить это.
Редактировать 2:
Измененный код, чтобы получить только 5 дат, для которых у меня есть данные. Текущий код выглядит так -
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv("stocks.csv",header=0,index_col=0)
df.index=pd.to_datetime(df.index,format="%d-%m-%y")
Создает график, как показано ниже:
линейный график
Теперь проблема заключается в том, что, как вы можете видеть на x-axis
, только первая дата имеет правильный формат. Мне нужно получить все даты в правильном формате.
Кроме того, легенда по умолчанию подходит к верхнему левому углу - есть ли способ ее переместить, например к правому верхнему углу?