现在我知道如何检查数据帧中多列的特定值。但是,我似乎无法解决如何基于布尔响应执行if语句。
例如:
使用os.walk
遍历目录,并将特定文件读入数据框。
for root, dirs, files in os.walk(main):
filters = '*specificfile.csv'
for filename in fnmatch.filter(files, filters):
df = pd.read_csv(os.path.join(root, filename),error_bad_lines=False)
现在在多个列中检查该数据帧。第一个值是列名(column1),下一个值是我在该列(香蕉)中查找的特定值。然后我检查另一列(column2)的特定值(绿色)。如果这两个都是真的,我想执行一项特定的任务。但是如果它是假的我想做别的事。
如下所示:
if (df['column1']=='banana') & (df['colour']=='green'):
do something
else:
do something
答案 0 :(得分:9)
如果您想检查DataFrame的任何行是否符合您的条件,您可以使用.any()
以及您的条件。示例 -
if ((df['column1']=='banana') & (df['colour']=='green')).any():
示例 -
In [16]: df
Out[16]:
A B
0 1 2
1 3 4
2 5 6
In [17]: ((df['A']==1) & (df['B'] == 2)).any()
Out[17]: True
这是因为您的条件 - ((df['column1']=='banana') & (df['colour']=='green'))
- 会返回一系列真/假值。
这是因为在pandas中将一个系列与一个标量值进行比较时,它会返回比较该系列的每一行与标量值的结果,结果是一系列True / False值,表示比较的结果具有标量值的那一行。示例 -
In [19]: (df['A']==1)
Out[19]:
0 True
1 False
2 False
Name: A, dtype: bool
In [20]: (df['B'] == 2)
Out[20]:
0 True
1 False
2 False
Name: B, dtype: bool
&
为两个系列排序and
。示例 -
In [18]: ((df['A']==1) & (df['B'] == 2))
Out[18]:
0 True
1 False
2 False
dtype: bool
现在要检查此系列中的任何值是否为True,您可以使用.any()
来检查系列中的所有值是否为True,您可以使用.all()
。