我想删除列表中的所有项目。我已尝试使用以下代码在pandas .apply()的上下文中遍历列表中的所有项目。但是,函数remove(x)似乎只是在remove_l中的第一项。我怎样才能确保它遍历remove_l中的所有项目?
我知道我可以创建单独的if语句,我已经完成了,但是我希望使用for循环来实现,以防列表变长。
remove_l = [r'[A-Za-z]+(?:\/)', r'Today, ', '-']
def remove(x):
for phrase in remove_l:
if re.search(phrase, x):
if phrase == '-':
new = x.replace(phrase, ' ')
else:
new = x[re.search(phrase, x).span()[1]:].strip()
return new
else:
return x
#check up on items
#60, 330, 347, 411, 647
#idx = nocountries_df[nocountries_df.Name.str.contains('\/')].Name.index
nocountries_df.Name.apply(lambda x: remove(x))
答案 0 :(得分:2)
这是一个缩进问题,当它遇到第一次返回时(在for循环中)它返回该值:
def remove(x):
for phrase in remove_l:
if re.search(phrase, x):
if phrase == '-':
new = x.replace(phrase, ' ')
else:
new = x[re.search(phrase, x).span()[1]:].strip()
return new # <- returns here (in first phase)
else:
return x # <- or returns here (in first phase)
你希望在 for循环之后返回,它可能最简单的只是在for循环中更改 x:
def remove(x):
for phrase in remove_l:
if re.search(phrase, x):
if phrase == '-':
x = x.replace(phrase, ' ')
else:
x = x[re.search(phrase, x).span()[1]:].strip()
return x