检查列的每一行是否在范围内

问题描述:

我正在构建一些数据的单元测试,并且在编写数据的pythonic检查时遇到了麻烦。检查列的每一行是否在范围内

我有一个熊猫DataFrame

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) 

如果它不只是返回如果数据下降的范围TrueFalse。所以在我的示例数据中,check_data(df, 'one')返回Falsecheck_data(df, 'two')返回True

我的头正试图采取一行一行的方式(谢谢我多年的Excel VBA),但我知道这是错误的。任何人都有更好的方法?

你可以使用betweenall检查各列:

>>> 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