pandas 使用可变数量的或语句
pandas使用变量数量的or语句
在处理pandas数据框时,有时候需要根据一些特定条件筛选数据。在某些情况下,我们可能需要使用变量数量的or语句,即根据一组值来筛选数据。
pandas提供了一种使用变量数量的or语句的方法,即使用`pd.DataFrame.query`函数。该函数的作用是根据指定的条件筛选数据。下面是一个示例代码:
select_values = [31, 22, 30, 25, 64] df_cut = df_new.query('l_ext in select_values')
在这个示例中,我们通过将变量`select_values`作为查询条件的一部分,实现了使用变量数量的or语句来筛选数据。
背后的实现原理是使用了顶层函数`pd.eval`。这个函数可以执行字符串形式的表达式,实现数据的筛选。
除了使用额外的变量之外,还有一种不需要创建额外变量的替代方法。可以使用`df_new.query('l_ext.isin([31, 22, 30, 25, 64]).values')`来实现相同的功能。
通过以上方法,我们可以根据变量数量的or语句来筛选pandas数据框中的数据,实现更加灵活的数据处理。
在使用pandas的过程中,有时我们需要根据多个条件来筛选数据。而其中一个常见的问题是如何使用变量数量的或语句来实现筛选。解决这个问题的方法是使用isin函数。
isin函数的用法如下:
df_new[df_new['l_ext'].isin([31, 22, 30, 25, 64])]
通过在方括号中传入一个列表,我们可以筛选出'l_ext'列中包含列表中任意元素的行。
然而,isin函数的负面之处是我们无法直接使用它的反操作。也就是说,我们无法通过传递一个列表来筛选出不包含列表中任意元素的行。
为了解决这个问题,我们可以使用numpy库中的logical_not函数,它可以对isin函数的结果取反。具体代码如下:
numpy.logical_not(df_new['l_ext'].isin([31, 22, 30, 25, 64]))
另外,pandas的作者也提供了另一种方法,可以参考stackoverflow上的这个问题:
stackoverflow.com/questions/14057007
除此之外,我们还可以使用~符号来对isin函数的结果取反。具体代码如下:
df_new[~df_new['l_ext'].isin([31, 22, 30, 25, 64])]
需要注意的是,如果列的数据类型不明确,比如是"object"类型,它既可以是数字也可以是字符串,那么isin函数会自动推断数据类型。在使用时要小心。