【问题标题】:Use 2 exceptions in a python function在 python 函数中使用 2 个异常
【发布时间】:2020-06-20 01:12:08
【问题描述】:

我想编写一个函数来计算按数据帧分组的列的模式。如果一个组的值没有众数,第一个例外:计算中位数,如果该组的值都是空值,第二个例外:什么都不做。 示例数据框如下所示:

dataframe = pd.DataFrame({'b':['b1','b1','b1','b1','b1','b1','b2','b2','b2','b2','b2','b2','b3','b3','b3'],'d':[0.1,None,0.12,None,None,0.13,1,2,1,1,None,None,None,None,None]})

功能如下:

def fill_mode(group):
    try:
        group['mode'] = mode(group['d'])
    except:
        not_nulls = group[~group['d'].isnull()]
        group['mode'] = median(not_nulls['d'])
    except:
        pass
    return group 

apply函数如下:

dataframe = dataframe.groupby('b').apply(fill_mode)

这会引发此错误:

SyntaxError: default 'except:' must be last

最终的输出应该是这样的:

【问题讨论】:

  • “第二个例外”是什么意思?
  • 你的意思是如果计算中位数时出现异常?您应该在第一个 except 块内有第二个 try/except
  • @Barmar 你的意思是如果你在计算中位数时遇到异常?正是
  • 看看这是否有帮助:stackoverflow.com/questions/17322208/…

标签: python median mode try-except


【解决方案1】:

您需要第二个 try/except 块。

def fill_mode(group):
    try:
        group['mode'] = mode(group['d'])
    except:
        try:
            not_nulls = group[~group['d'].isnull()]
            group['mode'] = median(not_nulls['d'])
        except:
            pass
    return group 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2019-12-17
    • 2016-04-24
    • 2020-07-21
    • 2013-01-05
    • 2015-11-06
    • 2018-12-13
    相关资源
    最近更新 更多