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

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

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

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

pandas

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

解決済

pandas: tsvファイル読み込み後のKeyErrorについて

rbtt1550
rbtt1550

総合スコア10

Python 3.x

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

pandas

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

1回答

0リアクション

0クリップ

367閲覧

投稿2022/08/18 10:40

編集2022/08/19 02:51

### 内容

下記のtsvファイル(test.log)を読み、pandasのdataframeに入れて、
I列が3の行を抽出したいと思っています。

イメージ説明

該当のソースコード

df = pd.read_csv(work_dir + "/test.log", delimiter='\t', engine='python') df.loc[df['I'] == 3,:]

しかし、
if is_scalar(key) and isna(key) and not self.hasnans:
KeyError: 'I'
のエラーが出て、抽出できません。

dtypesは以下のようになっています。

I int64 J int64 A float64 B float64 C float64 D float64 E float64 F float64 G float64 dtype: object

KeyErrorが出る原因が全く分からないのですが、どなたか原因がわかる方教えていただけないでしょうか。

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

KeyError Traceback (most recent call last) ~/miniforge3/envs/py38/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance) 3360 try: -> 3361 return self._engine.get_loc(casted_key) 3362 except KeyError as err: ~/miniforge3/envs/py38/lib/python3.8/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc() ~/miniforge3/envs/py38/lib/python3.8/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: 'I' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) /tmp/ipykernel_5373/2437506938.py in <module> ----> 1 df.loc[df_map['I'] == 3,:] ~/miniforge3/envs/py38/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key) 3453 if self.columns.nlevels > 1: 3454 return self._getitem_multilevel(key) -> 3455 indexer = self.columns.get_loc(key) 3456 if is_integer(indexer): 3457 indexer = [indexer] ~/miniforge3/envs/py38/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance) 3361 return self._engine.get_loc(casted_key) 3362 except KeyError as err: -> 3363 raise KeyError(key) from err 3364 3365 if is_scalar(key) and isna(key) and not self.hasnans: KeyError: 'I'

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

python3.8
jupyter notebook

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

rbtt1550

2022/08/18 10:43

すみません、一部、間違えていました。 【誤】df.loc[df_map['I'] == 3,:]   ↓ 【正】df.loc[df['I'] == 3,:] ただ、df.loc[df['I'] == 3,:]でも、エラー内容は同じで、KeyErrorが出ます。
melian

2022/08/18 11:57

元の TSV ファイルですが、ヘッダ行の I の前後にスペース(0x20)が入っていたりはしませんか?
meg_

2022/08/18 15:07 編集

> すみません、一部、間違えていました。 質問は編集できますので質問を編集しましょう。
meg_

2022/08/18 15:08

print(df.columns) でカラム名を確認されると良いかもしれません。
rbtt1550

2022/08/19 02:49

TSVファイルを確認したところ、tabの前に余計なスペースが入っていたようです。 全の列のtabを確認して修正したら、ちゃんと読み込めるようになりました。 皆様、有難うございました。

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

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

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Python 3.x

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

pandas

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