我正在构建一些数据的单元测试,并且在编写数据的pythonic检查时遇到问题。
我有一只熊猫:
d = {'one' : pd.Series([.14, .52, 1.], index=['a', 'b', 'c']),
'two' : pd.Series([.57, .25, .33, .98], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
现在,我想验证这些列的数据是否在[0,1]范围内。我想要一个函数:
check_data(df, column)
如果数据确实在范围内,则返回
DataFrame
,如果不在范围内,则返回True
。因此在我的示例数据中,False
返回check_data(df, 'one')
,False
返回check_data(df, 'two')
。我的头脑试图采取一个连续的方法(感谢我多年的Excel VBA),但我知道这是错误的。有没有更好的方法?
最佳答案
您可以使用between
和all
检查各个列:
>>> df['one'].between(0, 1).all()
False
>>> df['two'].between(0, 1).all()
True
between
默认情况下包括端点;若要更改此集合inclusive=False
。如果您愿意,还可以一次检查数据帧的每一列:
>>> ((0 <= df) & (df <= 1)).all()
one False
two True
dtype: bool
关于python - 检查列的每一行是否在范围内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34273779/