Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在所有数据框行中搜索超出定义数字范围的值?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何在所有数据框行中搜索超出定义数字范围的值?

Python 如何在所有数据框行中搜索超出定义数字范围的值?,python,pandas,dataframe,Python,Pandas,Dataframe,所以我有一个数据框,由50列和400行组成,包括所有的数字。我试图只显示值超出预定义范围的列(即仅显示不在-1到+3之间的值) 到目前为止,我已经: df[(df.T > 3).all()] 若要显示大于2的值,则可以将整数更改为其他感兴趣的数字,但如何编写内容以显示超出范围的数字(即显示值超出-1到+3范围的所有列) 您可以调用堆栈所有列,以便在一个范围内生成掩码,然后使用~反转掩码,然后调用: 所以这里只有列“a”的值不在0.1和1之间 在dropna之前,您可以看到其他列不符合此标

所以我有一个数据框,由50列和400行组成,包括所有的数字。我试图只显示值超出预定义范围的列(即仅显示不在-1到+3之间的值)

到目前为止,我已经:

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我正在运行ipython
3.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