Построение 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()
Другие вопросы по тегам