【发布时间】:2020-01-22 15:08:24
【问题描述】:
我在使用可用于创建像素图的代码时遇到问题,尤其是在对选定区域中的数据进行分组的循环中。我无法克服 KeyError。我该如何处理?
我正在使用 Python 3.7,并且我已经尝试对循环进行一些控制,但循环没有结束,因为第一个遇到的像素似乎是空的。 我还尝试使用 try: 和 except:KeyError,但最后我得到了一行我无法重塑的行,因为显然,循环只是跳过了空的子数据帧。 这里我汇报一下主要的代码步骤,让大家知道'lin'和'col'是整数,表示某个度量在某个像素中的位置:
第一次试用:
mean_val=[]
row=[]
for i in range (0,Ypix):
for j in range (0,Xpix):
data_pix = data.groupby(['lin', 'col']).get_group((i,j))[['ref', 'th']]
if KeyError:
data_pix = pd.DataFrame()
else:
mean_level= data_pix['ref'].mean()
row.append(mean_level)
mean_val = np.array(row).reshape(Ypix, Xpix)
第二次试用:
mean_val=[]
row = []
for i in range (0,Ypix):
for j in range (0,Xpix):
try:
data_pix=data.groupby(['lin', 'col']).get_group((i,j))[['ref', 'th']]
except KeyError:
data_pix = pd.DataFrame()
else:
mean_level= data_pix['ref'].mean()
row.append(mean_level)
mean_val = np.array(row).reshape(Ypix, Xpix)
我希望最后一行被重新整形以获得地图,并且我希望至少获得一个没有数据的空像素,以便正确地重新整形。显示的错误如下:
第一次试用:
Traceback (most recent call last):
File "grid.py", line 385, in <module>
proc.process()
File "grid.py", line 106, in process
data_pix = data.groupby(['lin', 'col']).get_group((i,j))[['ref', 'th']]
File "C:\xxx\yyy\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\groupby\groupby.py", line 680, in get_group
raise KeyError(name)
KeyError: (0, 0)
第二次试用:
Traceback (most recent call last):
File "grid.py", line 379, in <module>
proc.process()
File "grid.py", line 276, in process
mean_val = np.array(row).reshape(Ypix, Xpix)
ValueError: cannot reshape array of size 1506 into shape (50,50)
有人可以帮帮我吗?
【问题讨论】:
-
这里面有些东西倒退了。您不应该在双重嵌套的
for循环中使用groupby。您使用一次groupby,然后您可能会迭代结果。但肯定不会在循环内执行该操作。不过,我不确定我是否遵循最终结果
标签: python pandas dataframe for-loop pandas-groupby