如何在python中即使出现关键错误也能继续运行循环

如何在python中即使出现关键错误也能继续运行循环,python,pandas,dataframe,for-loop,pandas-groupby,Python,Pandas,Dataframe,For Loop,Pandas Groupby,我遇到了一个用于创建像素贴图的代码的问题,特别是在对选定区域中的数据进行分组的循环中。我无法克服一个关键错误。我怎么处理这件事 我正在使用Python3.7,我已经尝试对循环进行一些控制,但是循环没有结束,因为第一个遇到的像素似乎是空的。 我还尝试使用try:and except:KeyError,但在最后我得到了一行,我无法重塑它,因为很明显,循环只是跳过了空的子数据帧。 在这里,我报告了主要的代码步骤,让您知道“lin”和“col”是整数,表示某个度量值在某个像素中的位置: 第一次试用: m

我遇到了一个用于创建像素贴图的代码的问题,特别是在对选定区域中的数据进行分组的循环中。我无法克服一个关键错误。我怎么处理这件事

我正在使用Python3.7,我已经尝试对循环进行一些控制,但是循环没有结束,因为第一个遇到的像素似乎是空的。 我还尝试使用try:and except:KeyError,但在最后我得到了一行,我无法重塑它,因为很明显,循环只是跳过了空的子数据帧。 在这里,我报告了主要的代码步骤,让您知道“lin”和“col”是整数,表示某个度量值在某个像素中的位置:

第一次试用:

mean_val=[]
行=[]
对于范围内的i(0,Ypix):
对于范围(0,Xpix)内的j:
data_pix=data.groupby(['lin','col'])。get_group((i,j))[[['ref','th']]
如果出现错误:
data_pix=pd.DataFrame()
其他:
平均水平=数据pix['ref'].平均值()
行追加(平均水平)
平均值=np.数组(行).重塑(Ypix,Xpix)
第二次试用:

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)
mean_val=[]
行=[]
对于范围内的i(0,Ypix):
对于范围(0,Xpix)内的j:
尝试:
data_pix=data.groupby(['lin','col'])。get_group((i,j))[[['ref','th']]
除KeyError外:
data_pix=pd.DataFrame()
其他:
平均水平=数据pix['ref'].平均值()
行追加(平均水平)
平均值=np.数组(行).重塑(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)
回溯(最近一次呼叫最后一次):
文件“grid.py”,第385行,在
过程()
文件“grid.py”,第106行,正在处理中
data_pix=data.groupby(['lin','col'])。get_group((i,j))[[['ref','th']]
文件“C:\xxx\yyy\AppData\Local\Programs\Python\Python37\lib\site packages\pandas\core\groupby\groupby.py”,第680行,在get\u组中
raise KeyError(名称)
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)
回溯(最近一次呼叫最后一次):
文件“grid.py”,第379行,在
过程()
文件“grid.py”,第276行,正在处理中
平均值=np.数组(行).重塑(Ypix,Xpix)
ValueError:无法将大小为1506的数组重塑为形状(50,50)

任何人都可以帮我吗?

如果你真的想忽略KeyError,你可以编写以下代码:

 except KeyError:
      pass
正如我所想,您的groupby为组提供了一个可能的分数 i和j的组合(对于某些i/j组合,存在 没有对应的组)

那么,单独的异常处理(如另一个答案中所建议的)将不会起作用 工作,因为你:

  • 仅为现有组收集数据
  • 然后尝试重新塑造它们,就好像您拥有所有组的数据一样
我的主张是,不要收集所有组合的数据 对于i/j,由于缺少特定组而进行异常处理, 您应该填写中间结果的每个元素, 仅适用于现有组。比如:

means = data.groupby(['lin', 'col'])['ref'].mean()
结果是一个系列,包括:

  • 由lin和col像素坐标组成的多索引
  • 值-表示当前组中的ref
然后将此表转换为结果表(大小为Xpix*Ypix), 用表示“无数据”的值填充剩余单元格(例如0)

注意:由于您没有提供任何样本数据,因此我无法提供任何样本数据 测试,所以以上所有都是基于我对你案例的理解 最有可能的情况是,它需要一些更正/补全才能获得 真正有效的代码

补充:如何执行转码(示例) 假设这意味着-源系列为:

运行:

结果是:

   0  1  2  3  4
0  1  2  3  0  0
1  4  5  6  0  0
2  7  8  9  0  0
3  0  0  0  0  0
4  0  0  0  0  0
现在您有了一个带有默认列索引和默认行索引的数据框架,
但是如果您愿意,您可以使用
df1.values
——底层的Numpy数组。

这里面有些东西是向后的。您不应该在双嵌套的
for
循环中使用
groupby
。您可以使用
groupby
一次,然后可能会迭代结果。但肯定不会在循环中执行该操作。不过,我不确定我是否遵循最终结果
   0  1  2  3  4
0  1  2  3  0  0
1  4  5  6  0  0
2  7  8  9  0  0
3  0  0  0  0  0
4  0  0  0  0  0