我想查看我的数据框中是否有针对某一列的特定字符串,如果有则触发API。到目前为止的代码:
if new_df.col1.str.contains('string') == True:
POST REQUEST
elif new_df.col2.str.contains('string2') == True:
POST REQUEST
else:
print('not good')
我不断收到错误消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
最佳答案
出现此错误的原因是因为python中的if-else
表达式用于比较标量布尔值。您通过了系列赛。
在Pandas Gotchas的文档部分中查看更多内容。
熊猫遵循NumPy约定,在尝试时会引发错误
将某些内容转换为bool
。这会在if陈述中或
使用布尔运算时:and
,or
和not
。
在此示例中,您可以将它们组合成单个正则表达式模式'string2?'
,该模式表示'2'
是可选的。
def make_request():
...
for mask in new_df.col1.str.contains(r'string2?'):
if mask:
make_request()
如果您的
make_request
函数返回某些内容,则可以在list comp中调用它并分配回去:df['response'] = [
make_request() if m else np.nan for m in new_df.col1.str.contains(r'string2?')]
另一个选择是使用正则表达式或管道将字符串连接到列表中。
import re
words = ['string', 'string2']
for mask in new_df.col1.str.contains('|'.join(map(re.escape, words))):
...