我有一个带有DatetimeIndex的DataFrame。 DataFrame中所有Series中的所有值都应为NaN或等于或大于-a且小于或等于a的实数,其中a是实数。我如何检查这是真的?
如果可能的话,知道第一个发现的无效值的列和/或行也很高兴,但这不值得在代码复杂性或操作速度降低方面大幅度提高。
答案 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
第二个检查此新系列。