Pandas 在 LOC 函数中使用 and 运算符
Pandas use and operator in LOC function
我想在 loc
函数中有 2 个条件,但是 &&
或 and
运算符似乎不起作用。:
df:
business_id ratings review_text
xyz 2 'very bad'
xyz 1 'passable'
xyz 3 'okay'
abc 2 'so so'
我的代码:
我正在尝试收集所有 review_text
的收视率 < 3
并将 id = xyz
放入列表
id = 'xyz'
mylist = df.loc[df['ratings'] < 3 and df[business_id] ==id,'review_text'].values.tolist()
我应该得到:
['very bad','passable']
此代码无效,我收到错误消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
如何在此处正确使用 and
运算符?
您需要 &
作为 and
逻辑运算符,因为需要 element-wise and
,请参阅 boolean indexing:
id = 'xyz'
mylist=df.loc[(df['ratings'] < 3) & (df['business_id'] == id),'review_text'].values.tolist()
print (mylist)
['very bad', 'passable']
使用query
df.query('ratings < 3 & business_id == @id').review_text.tolist()
["'very bad'", "'passable'"]
使用 ~ 进行非逻辑运算
例如:
train.loc[(train['MiscVal'] == 0) & (~train['MiscFeature'].isna())]
我想在 loc
函数中有 2 个条件,但是 &&
或 and
运算符似乎不起作用。:
df:
business_id ratings review_text
xyz 2 'very bad'
xyz 1 'passable'
xyz 3 'okay'
abc 2 'so so'
我的代码:
我正在尝试收集所有 review_text
的收视率 < 3
并将 id = xyz
放入列表
id = 'xyz'
mylist = df.loc[df['ratings'] < 3 and df[business_id] ==id,'review_text'].values.tolist()
我应该得到:
['very bad','passable']
此代码无效,我收到错误消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
如何在此处正确使用 and
运算符?
您需要 &
作为 and
逻辑运算符,因为需要 element-wise and
,请参阅 boolean indexing:
id = 'xyz'
mylist=df.loc[(df['ratings'] < 3) & (df['business_id'] == id),'review_text'].values.tolist()
print (mylist)
['very bad', 'passable']
使用query
df.query('ratings < 3 & business_id == @id').review_text.tolist()
["'very bad'", "'passable'"]
使用 ~ 进行非逻辑运算
例如:
train.loc[(train['MiscVal'] == 0) & (~train['MiscFeature'].isna())]