如何更好地处理错误?

时间:2015-09-22 19:59:54

标签: python pandas

我正在提取需要一列ID值的数据,以便将其与另一个数据集匹配。此ID号位于数据集中的广告系列名称中,该数据集位于DataFrame中名为“广告系列”的列中。当我尝试从“广告系列”中提取ID号时,此列表比DataFrame的总条目短。我认为我的错误处理是责备。 “广告系列”中的条目通常遵循以下格式:

'CompanyAbbreviation_CampaignName_AccountNumber_ChannelNumber' 

(这是我试图提取的频道号码),但是,有些条目会丢失AccountNumber,ChannelNumber,而其他条目会有一个完整的条目加'_deleted'。

这是我的代码:

ID = []
campaigns = frame['Campaign']
for cam in campaigns:
    try:
        blocks = re.split('_',cam)
        for block in blocks:
            if len(block) == 6 and block.isdigit() or 5 and block.isdigit():
                ID.append(block)
    except ValueError:
        ID.append(000000)
ID = pd.Series(ID)
#frame.index = ID
#frame['Channel_ID'] = frame.index
return frame, ID

编辑:一些数据的屏幕截图 http://prntscr.com/8jck72

1 个答案:

答案 0 :(得分:0)

您的except块永远不会运行,因为只要所有try值都是字符串,您在cam块中执行的任何操作都不会引发异常。如果您要检测的“错误”是广告系列字符串中没有五位或六位数字,则应在break来电后设置append并在之后使用else循环结束。如果循环结束而没有点击else,则会运行break块:

for cam in campaigns:
    blocks = re.split('_',cam)
    for block in blocks:
        if len(block) in (5, 6) and block.isdigit():
            ID.append(block)
            break
    else:
        ID.append('000000')

我还修复了上面评论中指出的if语句中的错误,并且还将默认的000000值设为字符串,而不是编写整数{{{{}的详细方法。 1}}。