我正在提取需要有一列ID值的数据,以便与另一个数据集匹配。此ID号位于我在DataFrame中名为"campaign"的列中提取的数据集中的活动名称内。当我尝试从"Campaign"中提取ID号时,此列表比DataFrame的总条目短。我认为我的错误处理是罪魁祸首。"Campaign"中的条目通常遵循以下格式:
'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 您的except
块永远不会运行,因为只要所有cam
值都是字符串,您在try
块中所做的任何事情都不会引发异常。如果您要检测的"错误"是在活动字符串中没有五位数或六位数,则应该在append
调用后放置break
,并在循环结束后使用else
。如果循环结束而没有命中break
,则运行else
块:
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
值设置为字符串,而不是冗长地编写整数0
。