首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pvlib将时间数据转换为小时角度

使用pvlib将时间数据转换为小时角度
EN

Stack Overflow用户
提问于 2021-07-28 23:32:31
回答 2查看 63关注 0票数 0

我有以下格式的太阳数据:

我想使用pvlib包将时间索引转换为小时角度。到目前为止,我的代码使用pandas从.csv文件中读取输入数据,并提取时间数据。我需要将此数据(以30分钟为间隔)转换为小时角,但我一直收到错误:

代码语言:javascript
复制
TypeError: index is not a valid DatetimeIndex or PeriodIndex

到目前为止,我的代码如下:

代码语言:javascript
复制
# Import modules
import pandas as pd
import pvlib

# Read in data from .csv file for time and DHI
headers = ["Time","DHI"]
data_file = pd.read_csv("path to csv file",names=headers)
time_data = data_file["Time"]

# Find equation of time for hour angle calc
equation_of_time = pvlib.solarposition.equation_of_time_spencer71(1)

# Find hour angle
hour_angle = pvlib.solarposition.hour_angle(time_data, -89.401230, equation_of_time)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-29 04:49:50

正如错误消息所述,问题在于您的索引不是DateTimeIndex。为了计算小时角,我们需要知道具体的时间,因此需要一个DateTimeIndex。现在您只是简单地传递了一个整数列表,它对函数没有任何意义。

让我们首先创建一个小示例:

代码语言:javascript
复制
import pandas as pd
import pvlib

df = pd.DataFrame(data={'time': [0,570,720], 'DHI': [0,50,100]})
df.head()

   time  DHI
0     0    0
1   570   50
2   720  100

# Create a DateTimeIndex:
start_date = pd.Timestamp(2020,7,28).tz_localize('Europe/Copenhagen')
df.index = start_date + pd.to_timedelta(df['time'], unit='min')

现在DataFrame看起来像这样:

代码语言:javascript
复制
                           time  DHI
time                                
2020-07-28 00:00:00+02:00     0    0
2020-07-28 09:30:00+02:00   570   50
2020-07-28 12:00:00+02:00   720  100

现在我们可以将索引传递给小时角函数,因为它表示唯一的时间段:

代码语言:javascript
复制
equation_of_time = pvlib.solarposition.equation_of_time_spencer71(df.index.dayofyear)

# Find hour angle
hour_angle = pvlib.solarposition.hour_angle(df.index, -89.401230, 
                                         equation_of_time)

请注意开始日期是如何本地化到特定时区的。这是必要的,除非您的数据是UTC,否则索引不能表示唯一的时间段。

票数 3
EN

Stack Overflow用户

发布于 2021-07-30 12:19:28

@Adam_Jensen的答案是好的,但不是最简单的。如果您查看hour_angle函数的代码,您将看到其中的2/3专门用于将这些时间戳转换回整数。剩下的都很简单,你不需要pvlib。

代码语言:javascript
复制
# hour_angle and equation_of_time are defined in the question

LONGITUDE = -89.401230
LOCAL_MERIDIAN =  -90

hour_angle = (LONGITUDE - LOCAL_MERIDIAN) + (time_data - 720 + equation_of_time) / 4

理解引擎盖下发生的事情总是很好的!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68563292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档