質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

解決済

Pandasのapply機能

J1N
J1N

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1回答

0評価

0クリップ

17閲覧

投稿2019/02/08 14:36

編集2022/01/12 10:58

前提・実現したいこと

自分で定義した関数を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

def direction_of_3(column): direction_of_3 = [] idx = list(column.index) for i in idx: dif_1 = column["3SMA"].diff()[i] if dif_1 > 0: direction = 1 else: direction = 0 direction_of_3.append(direction) return direction_of_3 dataset["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|

試したこと

同じ内容を実行するために、以下のコードを試したところ、成功しました。

Python3

idx = list(dataset["3SMA"].index) direction_of_3 = [] for i in idx: dif_1 = dataset["3SMA"].diff()[i] if dif_1 > 0: direction = 1 else: direction = 0 direction_of_3.append(direction) dataset["direction_of_3"] = direction_of_3

しかし、コードに書いた通り、先に関数として定義しておき、その後にapplyを用いて適用しようとすると、エラーが起きてしまいます。
今回のコードがうまくいかない原因と、applyをうまくいくようにするための方法、またapplyの正しい使い方について、教えていただけますと幸いです。

補足情報(FW/ツールのバージョンなど)

Jupiter notebook を使用しています。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

tiitoi
tiitoi

2019/02/08 15:13

質問欄に読み込んだ元データを追記できますか?
J1N
J1N

2019/02/08 15:25

ご覧いただき、ありがとうございます。 元データの画像を質問に追加しました。 まだ初心者のため、pandasで編集を加えた別ファイルとして保存する方法とそれをこのサイトにアップする方法を知らない状況です。 元データをアップする手順をもし教えていただけましたら、取り掛かってみます。 大変お手数をおかけしますが、よろしくお願いいたします。
tiitoi
tiitoi

2019/02/08 15:29

ファイルアップする機能はないですが、質問欄を編集して、markdown 記法で生のCSVデータをそのまま貼り付ければいいと思います。\(長い場合は最初の20行ぐらいを抜粋\) https://qiita\.com/kamorits/items/6f342da395ad57468ae3#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%8C%BF%E5%85%A5
J1N
J1N

2019/02/08 16:25 編集

最初の20行を抜粋して記載してみました。 いかがでしょうか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。