簡體   English   中英

在目錄中從納斯達克繪制多個csv文件中的2列

[英]Plotting 2 columns from multiple csv files from NASDAQ in a directory

我正在嘗試制作一個程序,在其中讀取目錄中的多個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文件,但結果是相同的。 沒有曲線。 希望你們中有經驗的家伙能給個提示。

我對您的代碼做了一些補充。 我從您鏈接的頁面下載了一個文件,並運行了以下代碼。 更改ferms ,然后再次添加for循環。 您什么都沒得到的原因之一是因為您沒有在任何地方繪制數據。 您已經改變了美觀性並改變了所有內容,但是在代碼中沒有任何地方告訴python您想繪制此數據。

其次,即使添加了plotting命令,它也不會進行繪圖,因為DateClosing price都不是數字格式。 我更改了Datedatetime格式。 您的Closing price是一個逗號分隔的字符串。 它可以表示一個數字,以千或十進制表示。 我以為它是一個十進制數,盡管它更可能是千位數字(以逗號分隔)。 我已使用熊貓數據to_num的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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM