这不是我的问题,而是我在读取tmy3文件时遇到的问题的更多解决方法。我希望它对某些人有用。在编码和python方面,我还是一个新手,因此可能会有更简单的方法。
在使用iotools.read_tmy3()函数时,我遵循了其他人概述的示例和代码。这包括: 1.读取tmy3数据文件; 2.将年份强制为2015年(或您喜欢的任何其他年份);和, 3.将索引移动30分钟以匹配太阳辐射模拟。
我使用的代码是:
tmy_data, metadata = pvlib.iotools.read_tmy3(datapath, coerce_year=2015)
tmy_data = tmy_data.shift(freq='-30Min') ['2015']
tmy_data.index.name = 'Time
使用此代码,您将丢失DataFrame的最后一行。通过删除第二行中的['2015']可以解决此问题,但现在的最终日期是2014年。出于我的工作目的,我需要最终索引保持一致。
我所做的代码如下所示。这些是我的步骤: 1.从我的最后一行中识别索引,并复制其数据; 2.删除我的tmy_data DataFrame的最后一行; 3.使用偏移的日期和复制的数据创建一个新的数据框;和, 4.将行追加到我的tmy_data DataFrame
这有点乏味,但是当读取具有多个时区的多个tmy3文件时,它很容易解决。
#Remove the specific year from line 2 in the code above
tmy_data = tmy_data.shift(freq='-30Min')
#Identify the last row, and copy the data
last_date = tmy_data.iloc[[-1]].index
copied_data = tmy_data.iloc[[-1]]
copied_data = copied_data.to_dict(orient='list')
#Drop the row with the incorrect index
tmy_data.drop([last_date][0], inplace = True)
#Shift the date of the last date
last_date = last_date.shift(n = 1, freq = 'A')
#Create a new DataFrame with the shifted date and copied data
last_row = pd.DataFrame(data = copied_data,
index=[last_date][0])
tmy_data = tmy_data.append(last_row)
完成此操作后,我的最终结论是:
2015-01-01 00:30:00-05:00
....
2015-12-31 22:30:00-05:00
2015-12-31 23:30:00-05:00
通过这种方式,DataFrame包含8760行,而之前的方法则为8759行。
我希望这对其他人有帮助!