加载文件中的图中的ylabel错误

时间:2019-05-08 09:25:50

标签: python pandas dataframe matplotlib

This是我的.dat文件。我想使用以下脚本绘制TIMESTAMPGHI的图形:

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

path = r'C:\Users\...'
file = '\\File.DAT'

df = pd.read_csv(path+file, sep=',', header=0, skiprows=0)
df = df[['TIMESTAMP', 'GHI']]
df.drop([0,1], inplace=True)

df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'], dayfirst=True)
df.set_index('TIMESTAMP', inplace=True)

fig, ax = plt.subplots(figsize=(9,4))
ax.plot(df.index, df['GHI'])
plt.show()

但是,情节错误(如下图)。
Output from code

如果将数据框df保存到.csv文件,然后将其重新加载为df(使用相同的绘图脚本),则会给出正确结果(如下图) 。
Desired output

我想知道为什么从读取.dat文件的df进行绘图时却给出错误结果,而从读取.csv文件的df进行绘图时却给出正确结果呢?

有解决方案的建议吗?

2 个答案:

答案 0 :(得分:2)

在读取dat文件时,信息将解析为字符串。您可以通过在终端机type(df.GHI.iloc[0])中输入以下命令来看到此信息。

如果将GHI列转换为浮点数,则图应该算出来。

ax.plot(df.index, df['GHI'].astype(float))

答案 1 :(得分:1)

您的数据出现问题的是前两行,其中包含一些作为字符串的元数据。 因此,其余数据也将作为字符串加载。

"TIMESTAMP","GHI"
"TS","W/m2"
"","","Avg"
"2014-10-22 00:00:00",-0.4049856
...

在删除了这两行元数据之后,您需要正确转换列GHI的值的格式。幸运的是,时间戳记不能接受为字符串,并且可能使您感到困惑。

df.GHI=df.GHI.astype(float)

NB:

在第一个(错误的)绘图上,您仅看到GHI中未排序的字符串列表作为ylabel,有时会出现相同的值。