从目录中的NASDAQ中的多个csv文件中绘制2列

时间:2017-08-04 08:48:16

标签: python csv numpy matplotlib stockquotes

我正在尝试创建一个程序,我在其中读取目录中的多个csv文件。这些文件已从http://www.nasdaqomxnordic.com/aktier/historiskakurser

下载

第一行是sep=,它被跳过。分隔符为';'

问题在于即使我从所有csv文件中打印出数据,我也只得到空白图。

这个想法是在第6列中显示一个csv文件的日期为x轴(第0列)的数据图,依此类推,直到给定的目录为空。

我更喜欢将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 个答案:

答案 0 :(得分:0)

我为您的代码添加了一些内容。我从您链接的页面下载了一个文件并运行了以下代码。更改您的ferms并再次添加for循环。你没有得到任何东西的一个原因是你没有在任何地方绘制数据。你已经改变了美学和一切,但在你的代码中,你告诉python你想要绘制这些数据。

其次,即使您添加了绘图命令,它仍然不会绘制,因为DateClosing price都不是数字格式。我将Date列更改为datetime格式。您的Closing price是逗号分隔的字符串。它可以表示数千或小数的数字。我假设它是一个小数,虽然它更可能是以逗号分隔的数千。我使用pandas dataframe的apply方法使用名为to_num的自定义函数将其更改为数字。它用小数替换逗号。

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