我使用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