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

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

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

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

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

Q&A

解決済

1回答

813閲覧

作業用フォルダからコピーして清書フォルダを作成しているが、エラーが発生する

rururu.

総合スコア1

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

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

0グッド

0クリップ

投稿2023/03/03 01:48

実現したいこと

エラーを解消する

前提

jupyterlabでpythonを使って、作業用のedaフォルダからまとめなおしたモデルフォルダを作成しています。

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

KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_27964\3229945832.py in <module>
----> 1 df = data_pre(df)
2 df.info()

~\AppData\Local\Temp\ipykernel_27964\2112981477.py in data_pre(df)
7 df = df.drop(nonnull_list, axis=1)
8
----> 9 df = df.drop("市区町村名", axis=1)
10
11 df = df.drop("種類", axis=1)

~\anaconda3\lib\site-packages\pandas\util_decorators.py in wrapper(*args, **kwargs)
309 stacklevel=stacklevel,
310 )
--> 311 return func(*args, **kwargs)
312
313 return wrapper

~\anaconda3\lib\site-packages\pandas\core\frame.py in drop(self, labels, axis, index, columns, level, inplace, errors)
4955 weight 1.0 0.8
4956 """
-> 4957 return super().drop(
4958 labels=labels,
4959 axis=axis,

~\anaconda3\lib\site-packages\pandas\core\generic.py in drop(self, labels, axis, index, columns, level, inplace, errors)
4265 for axis, labels in axes.items():
4266 if labels is not None:
-> 4267 obj = obj._drop_axis(labels, axis, level=level, errors=errors)
4268
4269 if inplace:

~\anaconda3\lib\site-packages\pandas\core\generic.py in _drop_axis(self, labels, axis, level, errors, consolidate, only_slice)
4309 new_axis = axis.drop(labels, level=level, errors=errors)
4310 else:
-> 4311 new_axis = axis.drop(labels, errors=errors)
4312 indexer = axis.get_indexer(new_axis)
4313

~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in drop(self, labels, errors)
6659 if mask.any():
6660 if errors != "ignore":
-> 6661 raise KeyError(f"{list(labels[mask])} not found in axis")
6662 indexer = indexer[~mask]
6663 return self.delete(indexer)

KeyError: "['市区町村名'] not found in axis"

該当のソースコード

def data_pre(df):
nonnull_list = []
for col in df.columns:
nonnull = df[col].count()
if nonnull == 0:
nonnull_list.append(col)
df = df.drop(nonnull_list, axis=1)

df = df.drop("市区町村名", axis=1) df = df.drop("種類", axis=1) dis = { "30分?60分":45, "1H?1H30":75, "2H?":120, "1H30?2H":105 } df["最寄駅:距離(分)"] = df["最寄駅:距離(分)"].replace(dis).astype(float) df["面積(㎡)"] = df["面積(㎡)"].replace("2000㎡以上", 2000).astype(float) y_list = {} for i in df["建築年"].value_counts().keys(): if "平成" in i: num = float(i.split("平成")[1].split("年")[0]) year = 35 - num if "令和" in i: num = float(i.split("令和")[1].split("年")[0]) year = 5 - num if "昭和" in i: num = float(i.split("昭和")[1].split("年")[0]) year = 98 - num y_list[i] = year y_list["戦前"] = 78 df["建築年"] = df["建築年"].replace(y_list) year = { "年第1四半期":".25", "年第2四半期":".50", "年第3四半期":".75", "年第4四半期":".99" } year_list = {} for i in df["取引時点"].value_counts().keys(): for k, j in year.items(): if k in i: year_rep = i.replace(k, j) year_list[i] = year_rep df["取引時点"] = df["取引時点"].replace(year_list).astype(float) for col in ["都道府県名", "地区名", "最寄駅:名称", "間取り", "建物の構造", "用途", "今後の利用目的", "都市計画", "改装", "取引の事情等"]: df[col] = df[col].astype("category") return df

df = data_pre(df)
df.info()

試したこと

「市区町村名」をコピーして貼りなおしたり、付近に全角スペースが混ざっていないか確認しました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

pig_vba

2023/03/03 01:56

df.dropの前に print(df.head(3))してみるとどう出力されますか? jupyterから抜き出したとのことなので、もしかしたら上のセルで実行してるであろうデータ抽出コードを移植し忘れてるんじゃないかと思ったのですが
melian

2023/03/03 02:02

インデントが分からない状態ですが、 nonnull_list = [] for col in df.columns:  nonnull = df[col].count()  if nonnull == 0:   nonnull_list.append(col) df = df.drop(nonnull_list, axis=1) の部分で「市区町村名」カラムは既に削除(drop)されているのではないでしょうか。nonnull_list か df.columns を print して確認してみてください。
rururu.

2023/03/03 02:12

pig_vbaさん df.dropの前というのがよく分からなくて・・・すみません。 def data_pre(df): nonnull_list = [] for col in df.columns: nonnull = df[col].count() if nonnull == 0: nonnull_list.append(col) print(df.head(3)) df = df.drop(nonnull_list, axis=1) df = df.drop("市区町村名", axis=1) df = df.drop("種類", axis=1) こうで合ってますか?
pig_vba

2023/03/03 02:17

私の意図としてはそこでも大丈夫ですが、melianさんのコメントの確認もかねて df = df.drop("市区町村名", axis=1) の直前でprintしてみてください。
melian

2023/03/03 02:20

ちなみに、 nonnull_list = [] for col in df.columns:  nonnull = df[col].count()  if nonnull == 0:   nonnull_list.append(col) df = df.drop(nonnull_list, axis=1) の部分は、 df = df.dropna(axis=1, how='all') の一行で代替可能です。
rururu.

2023/03/03 02:38

def data_pre(df): nonnull_list = [] for col in df.columns: nonnull = df[col].count() if nonnull == 0: nonnull_list.append(col) df = df.drop(nonnull_list, axis=1) print(df.head(3)) df = df.drop("市区町村名", axis=1) df = df.drop("種類", axis=1) #~略~ df = data_pre(df) df.info() #出力されたもの 市区町村コード 都道府県名 地区名 最寄駅:名称 最寄駅:距離(分) 間取り 面積(㎡) 建築年 建物の構造 \ ID 1020026 1102 北海道 新琴似8条 麻生 6.0 2LDK 40.0 42.0 RC 1028771 1103 北海道 北33条東 新道東 NaN 2LDK 70.0 24.0 RC 1044035 1105 北海道 平岸1条 平岸(札幌市営) 5.0 2LDK 70.0 49.0 SRC 用途 今後の利用目的 都市計画 建ぺい率(%) 容積率(%) 取引時点 改装 取引の事情等 \ ID 1020026 住宅 NaN 近隣商業地域 80.0 500.0 2013.99 NaN NaN 1028771 住宅 NaN NaN NaN NaN 2009.75 未改装 NaN 1044035 住宅 住宅 第2種住居地域 60.0 200.0 2019.99 改装済 NaN 取引価格(総額)_log ID 1020026 6.301030 1028771 7.176091 1044035 7.146128 --------------------------------------------------------------------------- KeyError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_7056\3229945832.py in <module> ----> 1 df = data_pre(df) 2 df.info() ~\AppData\Local\Temp\ipykernel_7056\489609397.py in data_pre(df) 9 df = df.drop(nonnull_list, axis=1) 10 print(df.head(3)) ---> 11 df = df.drop("市区町村名", axis=1) 12 13 df = df.drop("種類", axis=1) ~\anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs) 309 stacklevel=stacklevel, 310 ) --> 311 return func(*args, **kwargs) 312 313 return wrapper ~\anaconda3\lib\site-packages\pandas\core\frame.py in drop(self, labels, axis, index, columns, level, inplace, errors) 4955 weight 1.0 0.8 4956 """ -> 4957 return super().drop( 4958 labels=labels, 4959 axis=axis, ~\anaconda3\lib\site-packages\pandas\core\generic.py in drop(self, labels, axis, index, columns, level, inplace, errors) 4265 for axis, labels in axes.items(): 4266 if labels is not None: -> 4267 obj = obj._drop_axis(labels, axis, level=level, errors=errors) 4268 4269 if inplace: ~\anaconda3\lib\site-packages\pandas\core\generic.py in _drop_axis(self, labels, axis, level, errors, consolidate, only_slice) 4309 new_axis = axis.drop(labels, level=level, errors=errors) 4310 else: -> 4311 new_axis = axis.drop(labels, errors=errors) 4312 indexer = axis.get_indexer(new_axis) 4313 ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in drop(self, labels, errors) 6659 if mask.any(): 6660 if errors != "ignore": -> 6661 raise KeyError(f"{list(labels[mask])} not found in axis") 6662 indexer = indexer[~mask] 6663 return self.delete(indexer) KeyError: "['市区町村名'] not found in axis" ​ 初心者すぎてどこを貼ったらいいかもわからなくて、長くなってしまい申し訳ないです。
pig_vba

2023/03/03 02:56 編集

出力の列名を見るに、 #出力されたもの 市区町村コード 都道府県名 地区名 最寄駅:名称 最寄駅:距離(分) 間取り 面積(㎡) 建築年 建物の構造 用途 今後の利用目的 都市計画 建ぺい率(%) 容積率(%) 取引時点 改装 取引の事情等 取引価格(総額)_logが各列名でしょうか。 消そうとしている['市区町村名','種類']は既に消去されているようです。既に無い列をまた消そうとしているのが原因なので、 df = df.drop("市区町村名", axis=1) df = df.drop("種類", axis=1) この二行は不要ということになります。
rururu.

2023/03/03 03:00

わかりました!ありがとうございます。melianさんも新しいことを教えてくださってありがとうございました!
rururu.

2023/03/03 06:25

回答は外部に確認のため、週明けになると思います。 お時間をいただきますこと、お許しください。
guest

回答1

0

自己解決

やはり該当箇所以前のところですでに処理が一度終わっていました。
詳しく述べますと、該当箇所も含め些末な処理をまとめて関数化したものを最初のほうに入れていました。
動画を見ながら作成したものですが、関数化したものを入れた後の処理が略されていたため、このようなことになりました。私が作成しながら理解をきちんとしていれば防げたことでした…。
回答いただきました方々、ありがとうございました。

投稿2023/03/20 05:34

rururu.

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問