如果语句收到"假"但仍在执行?



我使用Python 3.10和pandas来读取excel文件。

我想查看名为"组织类型"的列。用于特定子字符串。这里我使用"series.str.contains("substring")"从熊猫。返回一个布尔值。

当我打印这个布尔值时,值返回false。然而,当我使用它作为if语句的条件时,if语句执行起来就好像它是真的一样。下面是我的测试代码:

import pandas as pd
df = pd.read_excel("test.xlsx")
tissueType = pd.Series(['Tissue Type'])
#test before if
print ([tissueType.str.contains("testing false random noise", case = False)])
#test if
if [tissueType.str.contains("testing false random noise", case = False)]:
print("test = true")
#test after if
print ([tissueType.str.contains("testing false random noise", case = False)])

打印出来的是

[0    False
dtype: bool]
test = true
[0    False
dtype: bool]
Process finished with exit code 0

因此,在if语句前后,测试布尔值被打印为false。然而,当用作条件语句时,则执行if语句。我被这个弄糊涂了!有人看到我的错误了吗?我猜这是if语句的语法错误。

感谢

是的,@John Gordon在这一点上是正确的。它返回一个索引/序列,而不仅仅是一个简单的布尔值。即使在要测试的系列中只有一个项目,它也会返回一个包含单个元素的列表。通过条件语句传递的列表如果至少有一个元素,则被认为是True。试着

if [tissueType.str.contains("testing false random noise", case = False)[0]]:

my_var = tissueType.str.contains("testing false random noise", case = False)

if my_var[0]:
foo bar

最新更新