我正在尝试创建一个程序,我在其中读取目录中的多个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文件,但结果是一样的。没有曲线。 希望你们中的一个经验丰富的人能给出一个暗示。
答案 0 :(得分:0)
我为您的代码添加了一些内容。我从您链接的页面下载了一个文件并运行了以下代码。更改您的ferms
并再次添加for循环。你没有得到任何东西的一个原因是你没有在任何地方绘制数据。你已经改变了美学和一切,但在你的代码中,你告诉python你想要绘制这些数据。
其次,即使您添加了绘图命令,它仍然不会绘制,因为Date
和Closing 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()