使用 pandas 的 if 语句会抛出“ValueError:系列的真值不明确”

2023-12-11

我想查看我的数据框中是否存在某一列的特定字符串,如果存在则触发 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().

出现这个错误的原因是因为if-elsepython 中的表达式旨在比较标量布尔值。您通过了一个系列赛。

请参阅文档部分的更多内容熊猫陷阱.

pandas 遵循 NumPy 约定,当您尝试时会引发错误 将某物转换为bool。这发生在 if 语句或 使用布尔运算时:and, or, and not.


在此示例中,您可以将它们组合成一个正则表达式模式'string2?'这表明'2'是可选的。

def make_request():
    ...

for mask in new_df.col1.str.contains(r'string2?'):
    if mask:
        make_request()

If your make_request函数返回一些东西,你可以在列表 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))):
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pandas 的 if 语句会抛出“ValueError:系列的真值不明确” 的相关文章

随机推荐