[英]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命令,它也不會進行繪圖,因為Date
和Closing price
都不是數字格式。 我更改了Date
列datetime
格式。 您的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.