代码之家  ›  专栏  ›  技术社区  ›  iNoob

如何在panda中使用基于DataFrame布尔值的条件语句

  •  12
  • iNoob  · 技术社区  · 9 年前

    现在我知道如何检查数据帧中跨多个列的特定值。然而,我似乎无法解决如何基于布尔响应执行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),下一个值是我在该列中查找的特定值(banana)。然后,我检查另一列(column2)的特定值(绿色)。如果这两个都是真的,我想执行一项特定的任务。然而,如果它是假的,我想做一些其他的事情。

    比如:

    if (df['column1']=='banana') & (df['colour']=='green'):
        do something
    else: 
        do something
    
    1 回复  |  直到 9 年前
        1
  •  19
  •   Anand S Kumar    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')) -返回一系列真/假值。

    这是因为在panda中,当您将一个系列与标量值进行比较时,它会返回该系列的每一行与标量值的比较结果,结果是一系列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() .