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

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

ただいまの
回答率

88.21%

Pandasで読み込んだ値を取得する際のKeyError

解決済

回答 2

投稿 編集

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

SatoKenta

score 16

概要

Pandasのread_csvでcsvを読み込んだのですが、get_valueで値を取得しようとすると特定の列だけKeyErrorで取得に失敗します。
何故でしょうか。

下の例ですと、datebest_bid,best_ask,total_bid_depth,total_ask_depth,volume_by_product とあるうち
dateは取得できますが、best_bidが取得できません。

python実行結果

>>> df_input = pd.read_csv("fx_price.txt", engine='python')
>>> print(df_input)

                        date   best_bid   best_ask  total_bid_depth  total_ask_depth  volume_by_product
0    2020-02-26T15:02:59.257   997305.0   997633.0    1453.69624708     2038.7768117      8414.09400059
1     2020-02-26T15:03:59.95   998923.0   999389.0     1459.9432619    2031.11992611      8410.17144512
2     2020-02-26T15:05:00.63   998539.0   999521.0    1458.41412231    2040.29637346      8402.55105543
3    2020-02-26T15:05:59.427   998380.0   998757.0     1440.1740151    2043.23618297      8403.42293758
4     2020-02-26T15:06:59.93   998426.0   999270.0    1458.15758639    2028.92663713      8398.36991922
..                       ...        ...        ...              ...              ...                ...
561   2020-02-26T16:18:59.97   978638.0   979259.0    1419.55437243    2094.58635954       8557.5752912
562  2020-02-26T16:20:00.767   975555.0   975969.0    1413.78515289    2081.54020844      8551.47486732
563  2020-02-26T16:20:59.517   974083.0   975312.0    1404.60489384     2068.1232661      8580.96098291
564  2020-02-26T16:21:59.467   975334.0   975990.0    1420.19817003    2084.06289165      8581.71065758
565   2020-02-26T16:22:59.32   978511.0   979476.0     1419.7632521     2062.0463778      8609.05476514

[566 rows x 6 columns]
>>> print(df_input.get_value(5, 'date'))
2020-02-26T15:07:59.727

# ここまでは想定通り

>>> print(df_input.get_value(5, 'best_bid'))

# このコマンドを入れたところ、keyerrorが発生します

Traceback (most recent call last):
  File "/root/repo/lstm_test/test/lib/python3.5/site-packages/pandas/core/indexes/base.py", line 2897, in get_loc
    return self._engine.get_loc(key)
  File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'best_bid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/repo/lstm_test/test/lib/python3.5/site-packages/pandas/core/frame.py", line 2835, in get_value
    return self._get_value(index, col, takeable=takeable)
  File "/root/repo/lstm_test/test/lib/python3.5/site-packages/pandas/core/frame.py", line 2843, in _get_value
    series = self._get_item_cache(col)
  File "/root/repo/lstm_test/test/lib/python3.5/site-packages/pandas/core/generic.py", line 3270, in _get_item_cache
    values = self._data.get(item)
  File "/root/repo/lstm_test/test/lib/python3.5/site-packages/pandas/core/internals/managers.py", line 949, in get
    loc = self.items.get_loc(item)
  File "/root/repo/lstm_test/test/lib/python3.5/site-packages/pandas/core/indexes/base.py", line 2899, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'best_bid'

>>> print(df_input.columns)
Index(['date', ' best_bid', ' best_ask', ' total_bid_depth',
       ' total_ask_depth', ' volume_by_product'],
      dtype='object')
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2020/03/08 16:26

    print(df_input.columns)した結果を追記ください。

    キャンセル

  • SatoKenta

    2020/03/08 17:35

    こうなりました。
    >>> print(df_input.columns)
    Index(['date', ' best_bid', ' best_ask', ' total_bid_depth', ' total_ask_depth', ' volume_by_product'], dtype='object')

    キャンセル

  • yureighost

    2020/03/08 17:42

    そもそもget_valueは非推奨になっていて、自分の環境だとdateでもエラーになります。
    atを使うのはだめですか?
    print(df_input.at[5, 'best_bid'])

    キャンセル

回答 2

+2

列名に空白が含まれています。
pd.read_csv("fx_price.txt", skipinitialspace=True,~)のようにskipinitialspaceを指定してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

0

' best_bid'なので、最初に空白が必要なのではないでしょうか。テキストファイルに空白が入っていませんでしょうか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/03/08 19:36

    ご指摘の通りでした!
    くだらないミスで申し訳ないです、、、

    キャンセル

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

  • ただいまの回答率 88.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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