首页 > 解决方案 > 如何检查 DataFrame 中的所有值是否在特定条件内?

问题描述

我有一个带有 DatetimeIndex 的 DataFrame。DataFrame 中所有系列中的所有值都应该是 NaN 或等于或大于 -a 且小于或等于 a 的实数,其中 a 是实数。我如何检查这是真的?

如果可能的话,知道第一个发现的无效值的列和/或行也很好,但这不值得代码复杂性的任何严重增加或操作速度的降低。

标签: pythonpandasdataframe

解决方案


假设你有一个数据框

np.random.seed(10)
df = pd.DataFrame({'col1': np.random.randint(10,size=[5]),
                   'col2': np.random.randint(10,size=[5]),
                   'col3': [np.nan, 1, 2, 3, 4]})

    col1    col2    col3
0   9       0       NaN
1   4       1       1.0
2   0       8       2.0
3   1       9       3.0
4   9       0       4.0

并且您想检查所有值是否都是np.nan 以及其他一些条件。假设您只有数字作为列,您可以链接.all()以检查所有单元格是否符合这些条件:

a = 5
(df.isnull() | (df > a)).all().all()

请注意,您可以添加所需的条件,例如

(df.isnull() | (df > a) | (df < -a)).all().all()

细节:

(df.isnull() | (df > a))产量

    col1    col2    col3
0   True    False   True
1   False   False   False
2   False   True    False
3   False   True    False
4   True    False   False

这可以很容易地检查你在哪里有无效的索引。例如,usingidxmin()给出了第一次False出现的位置。

.idxmin()

col1    1
col2    0
col3    1
dtype: int64

第一个.all()检查每一列:

col1    True
col2    True
col3    True
dtype: bool

第二个检查这个新系列。


推荐阅读