为啥 if 语句迭代返回模棱两可的系列 bool?

Posted

技术标签:

【中文标题】为啥 if 语句迭代返回模棱两可的系列 bool?【英文标题】:Why does if statement iteration return ambiguous series bool?为什么 if 语句迭代返回模棱两可的系列 bool? 【发布时间】:2020-07-17 13:18:44 【问题描述】:

我对 python 很陌生。我正在尝试使用具有 2 个条件的“if”语句遍历列表列。我不断得到的返回语句是“一个系列的真值是不明确的(当使用 if 语句迭代一个系列时”

以下是我的代码(数据框由来自 Google Play 商店的应用数据组成)

import pandas as pd
df = pd.read_csv("googleplaystore.csv")
df.tail()

df["Rating"].fillna(value = '0.0', inplace= True)

medical_app_ratings = []

for row in df[1:]:
    rating = df.Rating
    genre = df.Genres
    if genre == "Medical":
        medical_app_ratings.append(rating)

ValueError                                Traceback (most recent call last)
<ipython-input-154-51c7806c01da> in <module>
      5     rating = df.Rating
      6     genre = df.Genres
----> 7     if genre == "Medical":
      8         medical_app_ratings.append(rating).bool()
      9 

~\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1477     def __nonzero__(self):
   1478         raise ValueError(
-> 1479             f"The truth value of a type(self).__name__ is ambiguous. "
   1480             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1481         )

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

如果有人能告诉我我做错了什么,我将不胜感激。

【问题讨论】:

你想要:df.loc[df['Genres'] == 'Medical', 'Rating']。在处理dataframes时,尽量摆脱iterating的想法,使用pandas和numpy提供的向量化方法。 caveats-and-gotchas 【参考方案1】:

我假设您想要遍历数据框,我建议使用df.iterrows() 来完成它。

这是一个如何使用它的示例:

medical_app_ratings = []
for i, row in df.iterrows():
  rating = row.Rating
  genre = row.Genres
  if genre == "Medical":
    medical_app_ratings.append(rating)

【讨论】:

以上是关于为啥 if 语句迭代返回模棱两可的系列 bool?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 all() 为空的可迭代对象返回 True? [复制]

TypeError:'bool' 对象不可迭代

为啥这个 if 语句以非布尔值成功?

为啥这个 if 语句不返回布尔值?

Swift 良好的编码实践:可选类型 Bool 的 If 语句

为啥我的函数 if/else if/else if 语句返回相同的答案?