This是我的.dat
文件。我想使用以下脚本绘制TIMESTAMP
与GHI
的图形:
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()
如果将数据框df
保存到.csv文件,然后将其重新加载为df
(使用相同的绘图脚本),则会给出正确结果(如下图) 。
我想知道为什么从读取.dat文件的df
进行绘图时却给出错误结果,而从读取.csv文件的df
进行绘图时却给出正确结果呢?
有解决方案的建议吗?
答案 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)
在第一个(错误的)绘图上,您仅看到GHI
中未排序的字符串列表作为ylabel,有时会出现相同的值。