2017-08-04 41 views
0

我想制作一个程序,在该目录中读取目录中的多个csv文件。这些文件已从http://www.nasdaqomxnordic.com/aktier/historiskakurser在目录中绘制来自纳斯达克的多个csv文件的2列

第一行是sep=,它被跳过。分隔符是​​3210

问题是,即使我从所有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文件,但结果是一样的。没有曲线。 希望你们有经验的人可以给你提示。

+0

一些编辑应该做你的缩进/代码 – iFlo

+0

你在哪里实际绘制的数据? – DavidG

回答

0

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

其次,即使您添加绘图命令,它仍然不会绘图,因为DateClosing price都不是数字格式。我将Date列更改为datetime格式。您的Closing price是逗号分隔的字符串。它可能代表数字,也可能是小数。我认为这是一个小数,尽管它更可能以千位数分隔逗号。通过使用名为to_num的自定义函数,使用pandas数据框的apply方法将其更改为数字。它用逗号替换逗号。

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

非常感谢,现在是时候享受一些乐趣了。 – Hennng

+0

@亨能你正在研究股票预测或相关的东西吗? –

+0

我想编一些代码来跟随各种股票。现在,当雅虎似乎关闭,我尝试使用谷歌和纳斯达克。使用纳斯达克,我发现OMX-20更容易找到。我的想法是通过一系列有趣的股票和报告来制作股票曲线,以便从曲线中决定我是否有兴趣销售或购买。我的银行有一个来自SIX的非常好的节目,但他们已经跳过了它,因为只有少数人能够使用它。后来我会尽量用一些数学来玩一点,但是现在我认为眼睛不是太糟糕。 :-) – Hennng

相关问题