我有一个超过4000行的数据集,它与全年的日照时数相对应。
我将这个数据帧按月划分到一个列表中,因此我在一个包含12个数据帧的列表中有几个小时的日照。这是一个示例。
index YYYY MM DD H DOY ANGLE AZIMUTH
812 2020 3 21 6.0 81 0.570550 89.931404
813 2020 3 21 7.0 81 11.781984 99.975618
814 2020 3 21 8.0 81 22.634332 110.842581
815 2020 3 21 9.0 81 32.658711 123.478690
816 2020 3 21 10.0 81 41.147775 139.003890 所以我有一个列表,其中嵌套了像这样的12个数据帧。
现在我想在一个计算阴影投影的函数中按月迭代。
第一步,定义我的月份函数:
def month(n_month):
df_month = df.loc[df['MM'] == n_month]
return df_month第二步在列表中存储月份:
month_list = []
for i in range(1, 13):
month_list.append(month(i))第三步,在预定义的函数上迭代month_list:这个函数包括为每个月的每个日照时间分配一个方位角和一个仰角:
def shade_array (index):
azimut = df.AZIMUT[index]
altitude = df.ANGLE[index]
shade = hillshade_beta(elevation, azimuth = azimut, altitude = altitude)
return shade输出是一个数组。
当我试图在月份列表中的每个数据帧上迭代这个函数,并将数组存储在一个新的列表中时,我遇到了这个问题:
array_list = []
for i in month_list:
array_list.append(shade_array(i))这将产生以下错误消息:
TypeError: Indexing a Series with DataFrame is not supported, use the appropriate DataFrame column
可以迭代数据帧列表吗?
期望的输出是一个包含12个数组列表的列表,每个数组嵌套在这个二阶列表中,每个数组都属于光栅中每个像素的阴影的值。
发布于 2020-02-21 06:06:13
考虑使用groupby进行月份拆分,然后使用列表理解构建数组列表,其中不需要中间对象month_list。您的主要问题是在shade_array()方法中,其中索引是数据帧。所以它应该是index.AZIMUT而不是df.AZIMUT[index],或者更明确地使用df作为参数:
def shade_array(df):
azimut = df['AZIMUT']
altitude = df['ANGLE']
shade = hillshade_beta(elevation, azimuth = azimut, altitude = altitude)
return shade
shade_arrays = [shade_array(g) for i, g in df.groupby(['MM'])]更好的做法是,将字典理解作为索引运行几个月:
import calendar
shade_arrays = {calendar.month_name[i]:shade_array(g) for i, g in df.groupby(['MM'])}
shade_arrays['January']
shade_arrays['February']
shade_arrays['March']
...https://stackoverflow.com/questions/60328847
复制相似问题