现在,我知道如何检查数据框中多列中的特定值。但是,我似乎无法弄清楚如何基于布尔响应执行if语句。
例如:
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
如果要检查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'))
返回一系列True /
False值。
这是因为在熊猫中,当将一个系列与一个标量值进行比较时,它将返回将该系列的每一行与该标量值进行比较的结果,并且结果是一系列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
现在,可以使用.any()
检查该系列中的任何值是否为True,可以使用检查系列中的所有值是否为True
.all()
。
问题内容: 如何将条件逻辑应用于Pandas DataFrame。 请参见下面显示的DataFrame, 我的原始数据显示在“数据”列中,并且期望的输出显示在其旁边。如果“数据”中的数字小于2.5,则所需的输出为False。 我可以应用循环并重新构建DataFrame …但是那是“非Python的” 问题答案: 只需将列与该值进行比较:
我有一个pandas数据框,我想从中删除特定列中字符串长度大于2的行。 我希望能够做到这一点(根据此答案): 但我只是得到了错误: 我做错了什么? (注意:我知道我可以使用删除包含任何的行,但我没有看到如何基于条件表达式删除行。)
问题内容: 我有一个DataFrame,说一个波动率表面,索引为时间,列为行权。如何进行二维插值?我可以,但是我该如何处理?我知道我们可以,但是甚至不是线性插值。有没有办法插入我们自己的方法进行插值? 问题答案: 您可以用来获取线性插值。 对于更复杂的事情,您需要推出自己的函数来处理一个对象并根据需要填充值并返回另一个对象。
问题内容: 我想根据以下条件创建一个带有数值的新列: 一种。 b。 C。所有其他组合, 我希望最终结果如下: 我该怎么做? 问题答案: 为此,可以使用做,条件使用位和用于和与周围的多个条件括号由于运算符优先级。因此,返回条件为true的地方,否则返回:
问题内容: 所以我有一个像这样的DataFrame: 我们可以像这样对它进行布尔索引 我们还可以通过行标签将其切片,如下所示: 我想同时执行这两个操作(因此,避免只做行标签过滤器而不必要地复制)。我将如何去做? 我要寻找的伪代码: 问题答案: 您几乎拥有它:
我有一个熊猫数据框,大约有50列和