我正在提取需要一列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
答案 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}}。