0

我正在尝试返回与我选择的标签相对应的熊猫数据框的行。例如,在我的函数 Female 中,它返回患者为女性的所有行。对于 AgeRange,我遇到了同时满足这两个条件而没有出现错误的问题。

dataset = pd.read_csv('insurance.csv')

def Female(self):
    rows = dataset[dataset.sex == 1]
    print(rows)

def AgeRange(self):
    rows = dataset[dataset.age > 0] & dataset[dataset.age < 20]
    print(rows)

使用按位运算符会出现以下错误: TypeError: unsupported operand type(s) for &: 'float' and 'bool'

def AgeRange(self):
    rows = dataset[dataset.age > 0] and dataset[dataset.age < 20]
    print(rows)

使用布尔值和运算符会得到以下错误: ValueError:DataFrame 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

def AgeRange(self):
    rows = np.logical_and(dataset[dataset.age > 0],dataset[dataset.age < 20])
    print(rows)

使用 numpy 逻辑并得到错误:ValueError:操作数无法与形状(1309,7)(135,7)一起广播。

老实说,我不确定这会给我留下什么,或者首先是什么导致了这个问题。谁能帮忙指出我哪里出错了?

4

2 回答 2

2

标准语法是

df[(df['a'] > X) & (df['a'] < Y)]

或使用查询():

df.query('X < a < Y') 
于 2019-12-09T14:50:14.733 回答
0

这种语法对我来说更容易!如果你同时满足 3 个不同的条件

cond1 = df["id"] == id
cond2  = df["date"] > date_min
cond3  = df["date"] < date_max

result = df[cond1 & cond2 & cond3]
于 2019-12-09T16:09:12.133 回答