过滤 Pandas 数据框结果而不先保存到变量

数据挖掘 Python 熊猫
2022-02-11 13:50:48

有没有一种方法可以更有效地过滤数据帧上的结果,而不必将其显式保存在变量中然后过滤?例如,在下面的代码中,我想在第 3 行添加一些内容,以便能够实现 df1 或 df2。

import pandas as pd
df=pd.DataFrame({'A' : [1,2,3,4,5], 'B' : [0,0,0,0,0]})
df=df.var()
df1 = df[df!=0]
df2 = df[df > 3]
2个回答

如果您想“即时”过滤 Pandas 系列,您可以将.loc[]indexer 与可调用方法结合使用(例如使用 lambda 函数)。

演示:

In [8]: df.var()
Out[8]:
A    2.5
B    0.0
dtype: float64

In [9]: df.var().loc[lambda ser: ser!=0]
Out[9]:
A    2.5
dtype: float64

In [10]: df.var().loc[lambda ser: ser>3]
Out[10]: Series([], dtype: float64)

如果要过滤 DataFrame,则可以使用DF.query(...)方法:

In [11]: df
Out[11]:
   A  B
0  1  0
1  2  0
2  3  0
3  4  0
4  5  0

In [12]: df.query("A >= 3")
Out[12]:
   A  B
2  3  0
3  4  0
4  5  0

我相信你正在寻找这个:

将熊猫导入为 pd
df=pd.DataFrame({'A' : [1,2,3,4,5], 'B' : [0,0,0,0,0]})
df1 = df[df[ 'B'] != 0]
df2 = df[df['A'] > 3]

根据您要完成的任务,您可以对其进行修改以满足您的需要。