如何调整iotools.read_tmy3函数的tmy_data输出中的索引。如果其他人遇到同样的问题,我该如何解决我的问题

时间:2019-05-02 18:20:05

标签: python pandas pvlib

这不是我的问题,而是我在读取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. 我尝试使用shift方法移动最后一行的索引,但未成功。
  2. 我试图通过将最后一行的索引设置为想要的DatetimeIndex来重新索引。
  3. 我试图从索引中删除时区数据,修改索引,然后重新应用时区数据。 所有这些都过于复杂,无助于解决我的问题。

对我有用的

我所做的代码如下所示。这些是我的步骤: 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行。

我希望这对其他人有帮助!

0 个答案:

没有答案