python - 如何检查 DataFrame 中的所有值是否在特定条件内?
问题描述
我有一个带有 DatetimeIndex 的 DataFrame。DataFrame 中所有系列中的所有值都应该是 NaN 或等于或大于 -a 且小于或等于 a 的实数,其中 a 是实数。我如何检查这是真的?
如果可能的话,知道第一个发现的无效值的列和/或行也很好,但这不值得代码复杂性的任何严重增加或操作速度的降低。
解决方案
假设你有一个数据框
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
第二个检查这个新系列。
推荐阅读
- c++ - 如何修复输出日志中的“EnableInput can only be specified on a Pawn for its Controller”错误
- angular - 为特定模块集成 Google Maps API
- php - 在 Laravel 中过滤显示 BadMethodCallException
- android - 已经添加到窗口管理器(在BroadCastReceiver中使用)
- javascript - 只有在主页面登录后才能淡入淡出?
- angular - Angular 8:如何在没有 html 标签的情况下使用 ngFor。我尝试了 ng-container 但它不起作用
- sql-server - 将 DD/MM 与 SQLServer 中的 GetDate() 匹配
- angular - 搜索字段失去焦点
- json - 使用 Apache Beam 和数据流将许多 json 加载到 BQ - json 模式错误
- java - 通过将地图分成块来提高性能