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

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

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

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

pandas

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

Q&A

解決済

4回答

3543閲覧

Pythonでデータの分離ができない

razuro

総合スコア15

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2019/08/01 14:24

ラベルとデータに分離したい

pythonで弁当販売の予測をしてます
データをxとyに分けようとしたら
エラーが発生した

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


KeyError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2889 try:
-> 2890 return self._engine.get_loc(key)
2891 except KeyError:

pandas_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

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: 'Y'

During handling of the above exception, another exception occurred:

KeyError Traceback (most recent call last)
<ipython-input-3-063c85bc5a18> in <module>
7 lunch = pd.read_csv("train.csv", sep=";", encoding="utf-8")
8
----> 9 y = lunch["Y"]
10 x = lunch.drop("Y", axis=0)
11

~\Anaconda3\lib\site-packages\pandas\core\frame.py in getitem(self, key)
2973 if self.columns.nlevels > 1:
2974 return self._getitem_multilevel(key)
-> 2975 indexer = self.columns.get_loc(key)
2976 if is_integer(indexer):
2977 indexer = [indexer]

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2890 return self._engine.get_loc(key)
2891 except KeyError:
-> 2892 return self._engine.get_loc(self._maybe_cast_indexer(key))
2893 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
2894 if indexer.ndim > 1 or indexer.size > 1:

pandas_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

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: 'Y'

該当のソースコード

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report

lunch = pd.read_csv("train.csv", sep=";", encoding="utf-8")

y = lunch["Y"]
x = lunch.drop("Y", axis=0)

x_train, y_train, x_test, y_test = train_test_split(
x, y, test_size = 0.25)

model = RandomForestClassifier()
Model = model.fit(x_train, y_train)

print("Trainig set score: {:.2f}".format(Model.score(x_train, y_train)))
print("Test set score: {:.2f}".format(Model.score(x_test, y_test)))

csvデータは
datetime Y week soldout name kcal remarks event payday weather precipitation temperature
0 2013-11-18 90 月 0 厚切りイカフライ NaN NaN NaN NaN 快晴 -- 19.8
1 2013-11-19 101 火 1 手作りヒレカツ NaN NaN NaN NaN 快晴 -- 17.0
2 2013-11-20 118 水 0 白身魚唐揚げ野菜あん NaN NaN NaN NaN 快晴 -- 15.5

な感じです

試したこと

pandasのアップデートをしてみましたができませんでした

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

jupyter notebook
python3.5

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

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

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

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

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

hayataka2049

2019/08/01 15:09

csvをテキストエディタで開いて貼り付けていただけませんか
razuro

2019/08/01 15:25

datetime,y,week,soldout,name,kcal,remarks,event,payday,weather,precipitation,temperature 2013-11-18,90,月,0,厚切りイカフライ,,,,,快晴,--,19.8 2013-11-19,101,火,1,手作りヒレカツ,,,,,快晴,--,17.0 2013-11-20,118,水,0,白身魚唐揚げ野菜あん,,,,,快晴,--,15.5 2013-11-21,120,木,1,若鶏ピリ辛焼,,,,,快晴,--,15.2 2013-11-22,130,金,1,ビッグメンチカツ,,,,,快晴,--,16.1 2013-11-25,135,月,1,鶏の唐揚,,,,,曇,--,14.6 2013-11-26,145,火,0,豚のスタミナ炒め,,,,,快晴,--,17.9 2013-11-27,140,水,1,ボローニャ風カツ,,,,,晴れ,--,14.7 2013-11-28,151,木,0,ハンバーグ,,,,,薄曇,--,17.7 2013-11-29,116,金,0,タルタルinソーセージカツ,,,,,快晴,--,12.1 2013-12-2,151,月,1,マーボ豆腐,,,,,快晴,--,13.8 2013-12-3,153,火,1,厚揚げ豚生姜炒め,,,,,快晴,--,13.9 2013-12-4,151,水,1,クリームチーズ入りメンチ,,,,,晴れ,--,13.5 全207行です
guest

回答4

0

csvデータは

貼り付けてあるデータだとTSV(タブ区切り)に見えますが大丈夫ですか?

x = lunch.drop("Y", axis=0)

2列目のYという名前のカラムだとすると、drop で列削除する場合のパラメータ指定は
axis=1
ではないでしょうか?

投稿2019/08/01 14:41

yu81

総合スコア90

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

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

0

ベストアンサー

sep=';'としているため、区切りがされずに一行をひとつの文字列として読み込まれているかと思われます。 そのため「Y」という列名が存在しないのでエラーとなります。

投稿2019/08/02 00:03

meg_

総合スコア10577

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

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

razuro

2019/08/03 05:06

解決しました ありがとうございます
guest

0

解答に繋がるか不明ですが、
データセットのラベル列を削除する場合
x = lunch.drop("Y", axis=0)
ではなく
x = lunch.drop("Y", axis=1)
ではないでしょうか?。

投稿2019/08/01 14:46

pea

総合スコア419

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

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

razuro

2019/08/01 14:48

すみません、データの貼り方が悪かったです 実際はこんな風です datetime,Y,week,soldout,name,kcal,remarks,event,payday,weather,precipitation,temperature 2013-11-18,90,月,0,厚切りイカフライ,,,,,快晴,--,19.8 2013-11-19,101,火,1,手作りヒレカツ,,,,,快晴,--,17.0 axis=1にしても変化がなかったです。
pea

2019/08/01 22:26 編集

yu81さんもタブ区切りに言及していますが、この場合 lunch = pd.read_csv("train.csv", sep=";", encoding="utf-8") ではなく lunch = pd.read_csv("train.csv", sep=",", encoding="utf-8") あるいは lunch = pd.read_csv("train.csv",encoding="utf-8") ですね。 フィッティングする前にxとyの中身をprintするなどで確認した方が良いです 上記を直すと、次にfit関数で例外が出ると思います。 文字列データを数値に変換する必要がありそうです。 https://codeday.me/jp/qa/20190301/341226.html
guest

0

列名は小文字のyになっているので、その前提で対処する必要がありそうですね。

python

1y = lunch["y"] 2x = lunch.drop("y", axis=1)

投稿2019/08/01 16:29

hayataka2049

総合スコア30933

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

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

razuro

2019/08/01 21:30

小文字のyにし、axis=1にしましたが変化なかったです
hayataka2049

2019/08/01 23:25

sep=";"も変なので、sep=","とかに だめなら、8行目にlunchをprintするコードを入れて、なにが出るか教えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問