我无法找到一个更好的标题来解决我的问题,但问题是,让我们假设我们有一个电影评论的数据框。我想创建另一个包含1星或5星评价的数据框。
我选择了这种方法:
movie_class = movie[movie['stars'] == 1 | movie['stars'] == 5]
然而,这给了我一个错误。但是当我只用一个条件创建数据帧时,代码工作正常。
movie = movie[movie['stars'] == 1]
无法理解原因。
错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-22-2fe827919d94> in <module>()
----> 1 movie_class = movie[movie['stars'] == 1 | movie['stars'] == 5]
~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __nonzero__(self)
1119 raise ValueError("The truth value of a {0} is ambiguous. "
1120 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1121 .format(self.__class__.__name__))
1122
1123 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:1)
根据我对你的问题的理解,这个例子可能就是你想要实现的目标:
Generatung类似的数据框,
import pandas
import random
movie = [random.randint(0,5) for i in range(20)];
df = pandas.DataFrame(movie, columns = ['stars']);
独立分类1星和5星布尔:
one_star_bool = df['stars']==1;
five_star_bool = df['stars']==5;
获取数据:
one_star = df['stars'][one_star_bool];
five_star = df['stars'][five_star_bool];
当然,您可以将这两者结合起来获得1星或5星,但要直接获取它,您可以使用:
one_or_five = df['stars'][one_star_bool | five_star_bool];
这可以吗?