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

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

ただいまの
回答率

90.51%

  • Python 3.x

    9851questions

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

  • pandas

    896questions

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

Pandasで、ある列の次の行のデータを新たな列として追加したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 160

J1N

score 5

前提・実現したいこと

機械学習を用いて、価格変動を予測するにあたって、「次の日の価格」を目的変数に設定したいです。

発生している問題・エラーメッセージ

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-49-b09e6a1aff7f> in <module>
      1 data_next = []
      2 for i in idx:
----> 3     next_value = dataset["Close"][i+1]
      4     data_next.append(next_value)
      5 dataset["next"] = data_next

~/anaconda3/lib/python3.6/site-packages/pandas/core/series.py in __getitem__(self, key)
    765         key = com._apply_if_callable(key, self)
    766         try:
--> 767             result = self.index.get_value(self, key)
    768 
    769             if not is_scalar(result):

~/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_value(self, series, key)
   3116         try:
   3117             return self._engine.get_value(s, k,
-> 3118                                           tz=getattr(series.dtype, 'tz', None))
   3119         except KeyError as e1:
   3120             if len(self) > 0 and self.inferred_type in ['integer', 'boolean']:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 7

該当のソースコード

data_next = []
for i in idx:
    next_value = dataset["Close"][i+1]
    data_next.append(next_value)
dataset["next"] = data_next

元データ

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

例えば、このデータのCloseの2行目を新たな列の1行目として設定したいという趣旨の質問です。
コードの中で、i+1 を i に変更したらエラーが起きなかったので、最後の行の次の行のデータがないため、エラーになったのだと思います。

目的を達成するための手段を教えていただけますと幸いです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

pandas.DataFrame.shiftが使えます。
参考:pandasでデータを行・列(縦・横)方向にずらすshift

import pandas as pd
df = pd.DataFrame({'close':[6560.160156,6552.649902,6563.279785]})
df['next'] = df['close'].shift(-1)
print(df)
"""
         close         next
0  6560.160156  6552.649902
1  6552.649902  6563.279785
2  6563.279785          NaN
"""

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/12 17:12

    早速ご教示いただき、ありがとうございます。
    無事解決いたしました。

    キャンセル

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

  • Python 3.x

    9851questions

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

  • pandas

    896questions

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