Построение 2 столбцов из нескольких CSV-файлов из NASDAQ в каталоге
Я пытаюсь создать программу, в которой я читаю несколько CSV-файлов в каталоге. Файлы были загружены с http://www.nasdaqomxnordic.com/aktier/historiskakurser
Первый ряд sep=
и это пропущено. Разделитель ';'
Проблема в том, что, хотя я печатаю данные из всех CSV-файлов, я получаю только пустые участки.
Идея состоит в том, чтобы показать график данных в столбце 6 с датой в виде оси X (столбец 0) для одного CSV-файла за раз и так до тех пор, пока данный каталог не станет пустым.
Я предпочел бы имя файла CSV (бумаги) только в качестве заголовка. Теперь я получаю имя каталога /csv.
Кажется, что matplotlib не понимает файл CSV правильно, даже если данные печатаются.
Мой код выглядит так:
import pandas as pd
#import csv
import glob
import matplotlib.pyplot as plt
#from matplotlib.dates import date2num
import pylab
#import numpy as np
#from matplotlib import style
ferms = glob.glob("OMX-C20_ScrapeData_Long_Name/*.csv")
for ferm in ferms:
print(ferm)
# define the dataframe
data = pd.read_csv(ferm, skiprows=[0], encoding='utf-8', sep=';', header=0)
print(data)
data.head()
pylab.rcParams['figure.figsize'] = (25, 20)
plt.rcParams['figure.dpi'] = 80
plt.rcParams['legend.fontsize'] = 'medium'
plt.rcParams['figure.titlesize'] = 'large'
plt.rcParams['figure.autolayout'] = 'true'
plt.rcParams['xtick.minor.visible'] = 'true'
plt.xlabel('Date')
plt.ylabel('Closing price')
plt.title(ferm)
plt.show()
Я пробовал несколько других способов открыть файлы CSV, но результат тот же. Нет кривых. Надеюсь, один из вас опытных парней может дать подсказку.
1 ответ
Я сделал несколько дополнений к вашему коду. Я скачал один файл со страницы, на которую вы ссылались, и запустил приведенный ниже код. Измени свой ferms
и снова добавьте цикл for. Одна из причин, по которой вы ничего не получили, заключается в том, что вы нигде не наносили данные. Вы изменили эстетику и все остальное, но нигде в своем коде вы не говорите Python, что хотите построить эти данные.
Во-вторых, даже если вы добавите команду построения, она все равно не будет построена, потому что ни одна из Date
а также Closing price
в числовом формате. Я меняю Date
столбец к datetime
формат. Ваш Closing price
строка через запятую Это может быть число в тысячах или десятичное число. Я предположил, что это десятичная дробь, хотя ее, скорее всего, число в тысячах, разделенных запятой. Я изменил его на числовой с помощью самоопределяемой функции под названием to_num
используя метод applyPandas dataframe. Он заменяет запятую на десятичную.
import pandas as pd
#import csv
import glob
import matplotlib.pyplot as plt
#from matplotlib.dates import date2num
import pylab
#import numpy as np
#from matplotlib import style
ferm = glob.glob("Downloads/trial/*.csv")[0]
def to_num(inpt_string):
nums = [x.strip() for x in inpt_string.split()]
return float(''.join(nums).replace(',', '.'))
# print(ferm)
data = pd.read_csv(ferm, skiprows=[0], encoding='utf-8', sep=';', header=0)
data['Date'] = pd.to_datetime(data['Date'])
data['Closing price'] = data['Closing price'].apply(to_num)
# print(data)
# data.head()
pylab.rcParams['figure.figsize'] = (25, 20)
plt.rcParams['figure.dpi'] = 80
plt.rcParams['legend.fontsize'] = 'medium'
plt.rcParams['figure.titlesize'] = 'large'
plt.rcParams['figure.autolayout'] = 'true'
plt.rcParams['xtick.minor.visible'] = 'true'
plt.xlabel('Date')
plt.ylabel('Closing price')
plt.title(ferm)
plt.plot(data.loc[:,'Date'], data.loc[:,'Closing price']) # this line plots the data
plt.show()
РЕДАКТИРОВАТЬ
Поддержание той же структуры кода, что и у вас -
import pandas as pd
#import csv
import glob
import matplotlib.pyplot as plt
#from matplotlib.dates import date2num
import pylab
#import numpy as np
#from matplotlib import style
ferms = glob.glob("OMX-C20_ScrapeData_Long_Name/*.csv")
def to_num(inpt_string):
nums = [x.strip() for x in inpt_string.split()]
return float(''.join(nums).replace(',', '.'))
for ferm in ferms:
data = pd.read_csv(ferm, skiprows=[0], encoding='utf-8', sep=';', header=0)
data['Date'] = pd.to_datetime(data['Date'])
data['Closing price'] = data['Closing price'].apply(to_num) # change to numeric
# print(data)
# data.head()
pylab.rcParams['figure.figsize'] = (25, 20)
plt.rcParams['figure.dpi'] = 80
plt.rcParams['legend.fontsize'] = 'medium'
plt.rcParams['figure.titlesize'] = 'large'
plt.rcParams['figure.autolayout'] = 'true'
plt.rcParams['xtick.minor.visible'] = 'true'
plt.xlabel('Date')
plt.ylabel('Closing price')
plt.title(ferm)
plt.plot(data.loc[:,'Date'], data.loc[:,'Closing price'])
plt.show()