前提・実現したいこと
自分で定義した関数をapplyを用いてpandasuに適用する
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-231-f829a566d8dd> in <module> 5 dataset = pd.get_dummies(data = dataset, columns = ["short_ma_order"]) 6 ----> 7 dataset["direction_of_3"] = dataset.apply(direction_of_3) 8 9 dataset.tail() ~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, result_type, args, **kwds) 6012 args=args, 6013 kwds=kwds) -> 6014 return op.get_result() 6015 6016 def applymap(self, func): ~/anaconda3/lib/python3.6/site-packages/pandas/core/apply.py in get_result(self) 314 if isinstance(self.f, (list, dict)): 315 return self.obj.aggregate(self.f, axis=self.axis, --> 316 *self.args, **self.kwds) 317 318 return super(FrameRowApply, self).get_result() ~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in aggregate(self, func, axis, *args, **kwargs) 5826 if axis == 0: 5827 try: -> 5828 result, how = self._aggregate(func, axis=0, *args, **kwargs) 5829 except TypeError: 5830 pass ~/anaconda3/lib/python3.6/site-packages/pandas/core/base.py in _aggregate(self, arg, *args, **kwargs) 549 return self._aggregate_multiple_funcs(arg, 550 _level=_level, --> 551 _axis=_axis), None 552 else: 553 result = None ~/anaconda3/lib/python3.6/site-packages/pandas/core/base.py in _aggregate_multiple_funcs(self, arg, _level, _axis) 607 # if we are empty 608 if not len(results): --> 609 raise ValueError("no results") 610 611 try: ValueError: no results
該当のソースコード
Python3
1def direction_of_3(column): 2 direction_of_3 = [] 3 idx = list(column.index) 4 for i in idx: 5 dif_1 = column["3SMA"].diff()[i] 6 7 if dif_1 > 0: 8 direction = 1 9 else: 10 direction = 0 11 direction_of_3.append(direction) 12 return direction_of_3 13 14dataset["direction_of_3"] = dataset.apply(direction_of_3)
元データ
|Date|Open|High|Low|Close|Adj Close|Volume|3SMA|5SMA|7SMA|
|:--|:--:|--:|
|1980-01-04|6560.160156|6560.160156|6560.160156|6560.160156|6560.160156|0|NaN|NaN|NaN|
|1980-01-07|6552.649902|6552.649902|6552.649902|6552.649902|6552.649902|0|NaN|NaN|NaN|
|1980-01-08|6563.279785|6563.279785|6563.279785|6563.279785|6563.279785|0|6558.696614|NaN|NaN|
|1980-01-09|6591.830078|6591.830078|6591.830078|6591.830078|6591.830078|0|6569.253255| NaN|NaN|
|1980-01-10|6594.009766|6594.009766|6594.009766|6594.009766|6594.009766|0.0|6583.039876 |6572.385937|NaN|
|1980-01-11|6615.509766|6615.509766|6615.509766|6615.509766|6615.509766 |0.0|6600.449870|6583.455859|NaN|
|1980-01-14|6659.549805|6659.549805|6659.549805|6659.549805|6659.549805|0.0|6623.023112|6604.835840|6590.998465|
|1980-01-16|6653.259766|6653.259766|6653.259766|6653.259766|6653.259766|0.0|6642.773112|6622.831836|6604.298410|
|1980-01-17|6656.299805|6656.299805|6656.299805|6656.299805|6656.299805|0.0|6656.369792|6635.725782|6619.105539|
|1980-01-18|6649.299805|6649.299805|6649.299805|6649.299805|6649.299805|0.0|6652.953125|6646.783789|6631.394113|
|1980-01-21|6666.270020|666.270020|6666.270020|6666.270020|6666.270020|0.0|6657.289877|6656.935840 |6642.028390|
|1980-01-22|6684.589844|6684.589844|6684.589844|6684.589844|6684.589844|0.0|6666.719890|6661.943848|6654.968402|
|1980-01-23|6694.189941|6694.189941|6694.189941|6694.189941|6694.189941|0.0|6681.683268|6670.129883|6666.208427|
|1980-01-24|6746.930176|6746.930176|6746.930176|6746.930176|6746.930176|0.0|6708.569987|6688.255957|6678.691337|
|1980-01-25|6767.709961|6767.709961|6767.709961|6767.709961|6767.709961|0.0|6736.276693|6711.937988|6695.041365|
|1980-01-28|6763.609863|6763.609863|6763.609863|6763.609863|6763.609863|0.0|6759.416667|6731.405957|6710.371373|
|1980-01-29|6770.830078|6770.830078|6770.830078|6770.830078|6770.830078|0.0|6767.383301|6748.654004|6727.732840|
|1980-01-30|6776.600098|6776.600098|6776.600098|6776.600098|6776.600098|0.0|6770.346680|6765.136035|6743.494280|
|1980-01-31|6768.160156|6768.160156|6768.160156|6768.160156|6768.160156|0.0|6771.863444|6769.382031|6755.432896|
|1980-02-01|6777.640137|6777.640137|6777.640137|6777.640137|6777.640137|0.0|6774.133464|6771.368066|6767.354353|
試したこと
同じ内容を実行するために、以下のコードを試したところ、成功しました。
Python3
1idx = list(dataset["3SMA"].index) 2direction_of_3 = [] 3for i in idx: 4 dif_1 = dataset["3SMA"].diff()[i] 5 if dif_1 > 0: 6 direction = 1 7 else: 8 direction = 0 9 direction_of_3.append(direction) 10 11dataset["direction_of_3"] = direction_of_3
しかし、コードに書いた通り、先に関数として定義しておき、その後にapplyを用いて適用しようとすると、エラーが起きてしまいます。
今回のコードがうまくいかない原因と、applyをうまくいくようにするための方法、またapplyの正しい使い方について、教えていただけますと幸いです。
補足情報(FW/ツールのバージョンなど)
Jupiter notebook を使用しています。

回答1件
あなたの回答
tips
プレビュー