微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用a.empty,a.bool(),a.item(),a.any()或a.all()[复制]

参见英文答案 > Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()                                    4个

import random
import pandas as pd

heart_rate = [random.randrange(45,125) for _ in range(500)]
blood_pressure_systolic = [random.randrange(140,230) for _ in range(500)]
blood_pressure_dyastolic = [random.randrange(90,140) for _ in range(500)]
temperature = [random.randrange(34,42) for _ in range(500)]
respiratory_rate = [random.randrange(8,35) for _ in range(500)]
pulse_oximetry = [random.randrange(95,100) for _ in range(500)]


vitalsign = {'heart rate' : heart_rate,
             'systolic blood pressure' : blood_pressure_systolic,
             'dyastolic blood pressure' : blood_pressure_dyastolic,
             'temperature' : temperature,
             'respiratory rate' : respiratory_rate,
             'pulse oximetry' : pulse_oximetry}


df = pd.DataFrame(vitalsign)


df.to_csv('vitalsign.csv')


mask = (50  < df['heart rate'] < 101 &
        140 < df['systolic blood pressure'] < 160 &
        90  < df['dyastolic blood pressure'] < 100 &
        35  < df['temperature'] < 39 &
        11  < df['respiratory rate'] < 19 &
        95  < df['pulse oximetry'] < 100
        , "excellent", "critical")

df.loc[mask, "class"]

好像是这样,

我收到的错误

ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all()

.我怎么能解决

解决方法:

正如评论中提到的user2357112,您不能在此处使用链式比较.对于元素比较,您需要使用&amp ;.这也需要使用括号,以便&不会优先.

它会是这样的:

mask = ((50  < df['heart rate']) & (101 > df['heart rate']) & (140 < df['systolic...

为了避免这种情况,您可以构建下限和上限系列:

low_limit = pd.Series([90, 50, 95, 11, 140, 35], index=df.columns)
high_limit = pd.Series([160, 101, 100, 19, 160, 39], index=df.columns)

现在您可以按如下方式切片:

mask = ((df < high_limit) & (df > low_limit)).all(axis=1)
df[mask]
Out: 
     dyastolic blood pressure  heart rate  pulse oximetry  respiratory rate  \
17                        136          62              97                15   
69                        110          85              96                18   
72                        105          85              97                16   
161                       126          57              99                16   
286                       127          84              99                12   
435                        92          67              96                13   
499                       110          66              97                15   

     systolic blood pressure  temperature  
17                       141           37  
69                       155           38  
72                       154           36  
161                      153           36  
286                      156           37  
435                      155           36  
499                      149           36  

对于作业,您可以使用np.where:

df['class'] = np.where(mask, 'excellent', 'critical')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐