Python 如何在所有数据框行中搜索超出定义数字范围的值?
所以我有一个数据框,由50列和400行组成,包括所有的数字。我试图只显示值超出预定义范围的列(即仅显示不在-1到+3之间的值) 到目前为止,我已经:Python 如何在所有数据框行中搜索超出定义数字范围的值?,python,pandas,dataframe,Python,Pandas,Dataframe,所以我有一个数据框,由50列和400行组成,包括所有的数字。我试图只显示值超出预定义范围的列(即仅显示不在-1到+3之间的值) 到目前为止,我已经: df[(df.T > 3).all()] 若要显示大于2的值,则可以将整数更改为其他感兴趣的数字,但如何编写内容以显示超出范围的数字(即显示值超出-1到+3范围的所有列) 您可以调用堆栈所有列,以便在一个范围内生成掩码,然后使用~反转掩码,然后调用: 所以这里只有列“a”的值不在0.1和1之间 在dropna之前,您可以看到其他列不符合此标
df[(df.T > 3).all()]
若要显示大于2的值,则可以将整数更改为其他感兴趣的数字,但如何编写内容以显示超出范围的数字(即显示值超出-1到+3范围的所有列) 您可以调用堆栈所有列,以便在一个范围内生成掩码,然后使用~
反转掩码,然后调用:
所以这里只有列“a”的值不在0.1和1之间
在dropna
之前,您可以看到其他列不符合此标准,因此它们生成NaN
:
In [199]:
df[~df.stack().between(0.1,1).unstack()]
Out[199]:
a b c
0 0.088639 NaN NaN
1 1.395237 -0.582110 NaN
2 -1.114384 -2.774358 2.119473
3 1.050008 -1.195167 -0.343875
4 -0.006156 -2.028601 -0.071448
默认情况下,包含左右值,如果不需要,则将
inclusive=False
传递到之间的您可以使用pd.DataFrame.mask
np.random.seed([3,1415])
df = pd.DataFrame(np.random.randint(-2, 4, (5, 3)), columns=list('abc'))
print(df)
a b c
0 -2 1 0
1 1 0 0
2 3 1 3
3 0 1 -2
4 0 -2 -2
掩码使计算结果为True
NaN
df.mask(df.ge(3) | df.le(-1))
a b c
0 NaN 1.0 0.0
1 1.0 0.0 0.0
2 NaN 1.0 NaN
3 0.0 1.0 NaN
4 0.0 NaN NaN
还是相反
df.mask(df.lt(3) & df.gt(-1))
a b c
0 -2.0 NaN NaN
1 NaN NaN NaN
2 3.0 NaN 3.0
3 NaN NaN -2.0
4 NaN -2.0 -2.0
这比我的回答好+1@EdChum你已经得到了我的+1,因为你的答案是我的第一本能df[~df.isin(range(-1,3))].dropna(axis=1)
。避免将列命名为T
,因为.T()
是一种数据帧/系列方法。如何将[199]中的和[199]中的元素作为输出的一部分?我在这里问了这个问题@ade1e好的,我想我知道这个问题,因为某些版本的ipython,在复制和粘贴时,它无法选择输入/输出作为文本选择的一部分,让我检查一下我的ipython/jupyterversion@ade1e我正在运行ipython3.1.0-cbccb68
基本上我试图升级到一个新版本,但发现新版本阻止了这种行为,所以我停止了升级
df.mask(df.lt(3) & df.gt(-1))
a b c
0 -2.0 NaN NaN
1 NaN NaN NaN
2 3.0 NaN 3.0
3 NaN NaN -2.0
4 NaN -2.0 -2.0