前提・実現したいこと
あるアンケートに基づいたデータで
回答が1~7の数字になっています。
その数字に応じて年齢層を当てはめていきたいのですが、
以下のエラーが起きました。
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-17-cd51ad4d6f63> in <module> ----> 1 data['age'] = data.apply(lambda row: age(row), axis=1) c:\users\jupyter-notebook\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, broadcast, raw, reduce, result_type, args, **kwds) 6904 kwds=kwds, 6905 ) -> 6906 return op.get_result() 6907 6908 def applymap(self, func): c:\users\jupyter-notebook\lib\site-packages\pandas\core\apply.py in get_result(self) 184 return self.apply_raw() 185 --> 186 return self.apply_standard() 187 188 def apply_empty_result(self): c:\users\jupyter-notebook\lib\site-packages\pandas\core\apply.py in apply_standard(self) 290 291 # compute the result using the series generator --> 292 self.apply_series_generator() 293 294 # wrap results c:\users\jupyter-notebook\lib\site-packages\pandas\core\apply.py in apply_series_generator(self) 319 try: 320 for i, v in enumerate(series_gen): --> 321 results[i] = self.f(v) 322 keys.append(v.name) 323 except Exception as e: <ipython-input-17-cd51ad4d6f63> in <lambda>(row) ----> 1 data['age'] = data.apply(lambda row: age(row), axis=1) <ipython-input-16-5f52c4822bc4> in age(row) 1 def age(row): ----> 2 if (data['a2'] == 0): 3 return'19歳以下' 4 elif (data['a2'] == 1): 5 return'20~24歳' c:\users\jupyter-notebook\lib\site-packages\pandas\core\generic.py in __nonzero__(self) 1554 "The truth value of a {0} is ambiguous. " 1555 "Use a.empty, a.bool(), a.item(), a.any() or a.all().".format( -> 1556 self.__class__.__name__ 1557 ) 1558 ) ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')
該当のソースコード
Python
1def age(row): 2 if (data['a2'] == 0): 3 return'19歳以下' 4 elif (data['a2'] == 1): 5 return'20~24歳' 6 elif (data['a2'] == 2): 7 return '25~29歳' 8 elif (data['a2'] == 3): 9 return '30~34歳' 10 elif (data['a2'] == 4): 11 return '35~39歳' 12 elif (data['a2'] == 5): 13 return '40~44歳' 14 elif (data['a2'] == 6): 15 return '45~49歳' 16 else: 17 return '50歳以上' 18data['age'] = data.apply(lambda row: age(row), axis=1)
試したこと
条件を()で囲んだら解決するかと思いましたが、
失敗しました。
|とかを使うのか、もしくはfor文の方がよいかなど
色々考えていますが、頂ければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/20 07:33