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

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

新規登録して質問してみよう
ただいま回答率
85.37%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

解決済

3回答

26586閲覧

なぜKeyErrorが出るのかがわからない

BOLTE

総合スコア26

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2021/01/10 10:29

たとえば次のCSVをpandas.DataFrameとして読み込み、

CSV

1name, age 2Hadiya Haines, 20 3Ezekiel Hawes, 21 4Bartlomiej Cano, 22 5Yvie Mcfarlane, 23 6Wyatt Robin, 24 7Faris Hammond, 25 8Esmee Easton, 26 9Summer-Louise Oakley, 27 10Sanjay Lin, 28 11Elyse Fisher, 29

このPythonスクリプトを実行すると

Python

1import pandas as pd 2 3path_csv = "test.csv" 4df = pd.read_csv(path_csv) 5 6df["sex"] = -1 7for index in df.index: 8 if ( 9 df["name"][index] == "Sanjay Lin" 10 and df["age"][index] == 28 # ここでエラーになる。"age"という列はあるのになぜ? 11 and df["sex"][index] == -1 12 ): 13 print(df.iloc[index, :])

このようなエラーがでてしまいます。

bash

1Traceback (most recent call last): 2 File "/Users/ユーザー名/.pyenv/versions/anaconda3-5.3.1/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 2897, in get_loc 3 return self._engine.get_loc(key) 4 File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc 5 File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc 6 File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item 7 File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item 8KeyError: 'age' 9 10During handling of the above exception, another exception occurred: 11 12Traceback (most recent call last): 13 File "/Users/ユーザー名/test.py", line 11, in <module> 14 and df["age"][index] == 28 15 File "/Users/ユーザー名/.pyenv/versions/anaconda3-5.3.1/lib/python3.6/site-packages/pandas/core/frame.py", line 2995, in __getitem__ 16 indexer = self.columns.get_loc(key) 17 File "/Users/ユーザー名/.pyenv/versions/anaconda3-5.3.1/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 2899, in get_loc 18 return self._engine.get_loc(self._maybe_cast_indexer(key)) 19 File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc 20 File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc 21 File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item 22 File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item 23KeyError: 'age'

"age"という列はあるのに、なぜKeyErrorが出るのでしょうか? 何か間違っていることをしていると思いますか?

Python

1and df["age"][index] == 28 # ここでエラーになる。"age"という列はあるのになぜ?

この行をコメントアウトするとエラーは出ません。というよりifの条件にdf["age"][index] == 28が含まれるとエラーになることがわかりました。

よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

カンマの後ろにスペースが入っています。その場合、age ではなく、 age という列名と解釈されます。名前のように空白を含む文字列は "Hadiya Haines" のように引用符で囲むようにし、それ以外の関係ないスペースはCSVからすべて削除してください。

diff

1- name, age 2+ name,age

投稿2021/01/10 10:33

編集2021/01/10 10:38
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BOLTE

2021/01/10 10:40

おお…ありがとうございます
guest

0

別解として。

CSVファイルに手を加えることが面倒だったり、不可能だったりすることもあるため、read_csvにはskipinitialspaceというオプション引数が用意されています。こいつにTrueを設定してread_csvを呼び出せば、カンマの直後の空白を無視してデータフレームが作成されます。

たとえば、今回のコードの場合は、

Diff

1-df = pd.read_csv(path_csv) 2+df = pd.read_csv(path_csv, skipinitialspace=True)

とすれば、CSVファイルやコードの他の部分はそのままで動作します。

投稿2021/01/10 13:00

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BOLTE

2021/01/10 14:18

ありがとうございます。なるほど、そうゆうオプションもあるのですね。勉強になります!
guest

0

csvにsex ってないのでは?

and df["sex"][index] == -1

投稿2021/01/10 10:35

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問