小能豆

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

py

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

阅读 17

收藏
2024-12-09

共1个答案

小能豆

你遇到的错误是因为 new_df.col1.str.contains('string') 返回的是一个布尔型的 Series,而你不能直接将整个 Series 与 True 比较,这会导致 ValueError。你需要使用 .any().all() 来检查该列中是否至少有一个值匹配你的条件。

解决方法:

  1. 使用 .any() 检查是否有至少一个匹配的值。
  2. 如果你想检查某一列所有值是否都匹配,可以使用 .all()

修改后的代码:

if new_df.col1.str.contains('string').any():  # 检查 col1 是否有任何匹配的字符串
    # POST REQUEST
elif new_df.col2.str.contains('string2').any():  # 检查 col2 是否有任何匹配的字符串
    # POST REQUEST
else:
    print('not good')

解释:

  • new_df.col1.str.contains('string') 返回的是一个布尔型的 Series(每个元素是否包含 'string')。
  • .any() 将检查这个 Series 中是否有至少一个 True 值。如果有,条件就成立。
  • .all() 将检查该 Series 中是否所有值都为 True

如果你只关心是否有至少一个匹配的字符串,那么使用 .any() 是最合适的。

2024-12-09