如何检查DataFrame中的所有值都在特定条件内?

时间:2018-10-16 01:29:05

标签: python pandas dataframe

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

如果可能的话,知道第一个发现的无效值的列和/或行也很高兴,但这不值得在代码复杂性或操作速度降低方面大幅度提高。

1 个答案:

答案 0 :(得分:0)

假设您有一个数据框

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

可以轻松检查索引无效的位置。例如,使用idxmin()可以确定您第一次False出现的位置。

.idxmin()

col1    1
col2    0
col3    1
dtype: int64

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

col1    True
col2    True
col3    True
dtype: bool

第二个检查此新系列。