有没有一种方法可以更有效地过滤数据帧上的结果,而不必将其显式保存在变量中然后过滤?例如,在下面的代码中,我想在第 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]
有没有一种方法可以更有效地过滤数据帧上的结果,而不必将其显式保存在变量中然后过滤?例如,在下面的代码中,我想在第 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]
如果您想“即时”过滤 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]
根据您要完成的任务,您可以对其进行修改以满足您的需要。