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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

Q&A

解決済

3回答

9107閲覧

いきなりkey errorが起きるようになってしまった。。。

Pablito

総合スコア71

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

0グッド

2クリップ

投稿2019/07/23 04:48

編集2019/07/24 00:13

Jupyter Notebookで購買のデータを分析していました。
試行錯誤しながら進めていたのですが、
作業の途中で突然、
今まで問題なく読み込めていたkeyにerrorが起きるようになり、
pd.to_datetimeやpd.mergeなど、
全ての操作にエラーが起きるようになってしまいました。

何もコードはいじっていないので、
自分でも原因が分かりません。。。

皆様もこういった経験はあるのでしょうか?
これは環境の問題ですか???
解決方法が分かる方はいらっしゃいますでしょうか???

例えば、

Python

1df.keys()

Index(['cst_id', 'date_purchase_c', 'date_purchase_n',** 'yymm_purchase',**
'InsDate', 'dhms_InsDate', 'Trn_Type', 'rev', 'num', 'code', 'Brand',
'MdName', 'TranKey', 'TranLineNo', 'Store_code', 'TerminalNo',
'date_purchase', 'TranNo', 'StoreName', 'St_SalesChannel',
'St_Hierarchy', 'Category_c', 'Item_c', 'Sub_Item_c', 'Category',
'Item', 'Sub_Item', 'Sub_Item_2', 'FY'],
dtype='object')
なのに、

Python

1df =pd.to_datetime(df['yymm_purchase'])

###エラーメッセージ

KeyError Traceback (most recent call last)
<ipython-input-56-7d6126cfd80c> in <module>
----> 1 df =pd.to_datetime(df['yymm_purchase'])

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\series.py in getitem(self, key)
866 key = com.apply_if_callable(key, self)
867 try:
--> 868 result = self.index.get_value(self, key)
869
870 if not is_scalar(result):

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
4373 try:
4374 return self._engine.get_value(s, k,
-> 4375 tz=getattr(series.dtype, 'tz', None))
4376 except KeyError as e1:
4377 if len(self) > 0 and (self.holds_integer() or self.is_boolean()):

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index_class_helper.pxi in pandas._libs.index.Int64Engine._check_type()

KeyError: 'yymm_purchase'

all codes below

Python

1import pandas as pd 2import numpy as np 3import scipy as sp 4import matplotlib.pyplot as plt 5import matplotlib as mpl 6import datetime as dt 7import seaborn as sns 8import io 9from dateutil.parser import parse 10%precision 3 11 12data = pd.read_csv(rf'G:\共有.csv', engine='python', 13 encoding='cp932', dtype='object') 14 15df = pd.read_csv(rf'G:\購買履歴', engine='python', 16 encoding='cp932', dtype='object') 17 18#取り込んだデータの確認 19data.info() 20df.keys() 21df.head() 22data.drop_duplicates() #重複の削除 23 24#chnage values into strings 25data['cst'].astype(str) 26data['Store'].astype(str) 27data['Post'].astype(str) 28 29data = data.drop(['date_n', 'birthday_n'], axis = 1) 30 31#カラムをdatetime型に変換 32df =pd.to_datetime(df['date_c']) 33s = df.loc(['yymm_purchase']) 34df = pd.to_datetime(s)

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

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

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

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

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

y_waiwai

2019/07/23 04:53

該当のコードと、エラーメッセージを提示しましょう。
Pablito

2019/07/23 05:00

例を追加しました。 宜しくお願い致します。
y_waiwai

2019/07/23 05:12 編集

> 皆様もこういった経験はあるのでしょうか? 助けるもなにも、しつもんはなんなんでしょうか。 それを質問にしっかり書きましょう
Pablito

2019/07/23 05:22

解決方法が知りたいです。
guest

回答3

0

ベストアンサー

具体的にどこがおかしくなったのかはわからないのですが、何らかの形でデータフレームの構造が壊れているのかもしれません。その場合はデータを読み込み直すことで解消するかと。

投稿2019/07/23 07:45

hayataka2049

総合スコア30933

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

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

Pablito

2019/07/23 09:22

回答ありがとうございます。 一応、pd.read_csvで読み直しもしてみたのですが、 結果は変わりませんでした。 個人的にはAnacondaに原因があると考えているのですが どうお考えですか?
hayataka2049

2019/07/23 10:35

可能性はあるかもしれませんが、他の可能性を潰すのが先です。 Jupyterを使っているのであれば、カーネルリスタートも試してみてください。
hayataka2049

2019/07/23 10:36

また、可能であればこれに至るまでに実行したコード全文とCSVファイルをテキストエディタで開いた内容(すべての行を含まなくても構いません。先頭10行くらい)をご提示ください。それでこちらで再現するかどうか、まずい操作がないかどうかを確認できます。
hayataka2049

2019/07/23 10:38

>df =pd.to_datetime(df['yymm_purchase']) df['yymm_purchase']の結果をdfに代入しているのはおかしいですね。pd.to_datetimeの結果はSeriesで得られますので。このコードを2回実行したら失敗すると思います。質問文の状況との関連は不明です。
Pablito

2019/07/24 00:05

ありがとうございます。 コードをできる限り載せたいと思います。
Pablito

2019/07/24 00:05

import pandas as pd import numpy as np import scipy as sp import matplotlib.pyplot as plt import matplotlib as mpl import datetime as dt import seaborn as sns import io from dateutil.parser import parse %precision 3
Pablito

2019/07/24 00:07

data.drop_duplicates() #重複の削除
Pablito

2019/07/24 00:07

data['cst_id'].astype(str)
Pablito

2019/07/24 00:08

data['Store'].astype(str)
Pablito

2019/07/24 00:17

すいません。 こちらにごちゃごちゃ書いてしまいましたが、 質問本文に追加してので、 そちらを参照ください。 とりあえず、途中でエラーが起きるようになったところまで 書いています。
hayataka2049

2019/07/24 04:07

先のコメントにも同じことを書きましたが、 >df =pd.to_datetime(df['date_c']) >s = df.loc(['yymm_purchase']) pd.to_datetimeはdf['date_c']をdatetime型のSeriesにした結果を返します。それをdfに代入しているので、その下の処理がぜんぶ意図しないものになっているのでは?
Pablito

2019/07/24 04:18

例えば A = cst['date_c'] cst = pd.to_datetime(A) では動くのに cst_period = (cst['date_c'] >=dt.datetime(2017,5,29)) & (cst['data_c'] <= dt.datetime(2019,6,2)) でKeyError: 'date_c' が起きるのはそういった理由からでしょうか?
hayataka2049

2019/07/24 04:20

そういった理由からですね。
hayataka2049

2019/07/24 04:20

きっと、 cst['date_c'] = pd.to_datetime(A) がお望みの処理でしょう。
Pablito

2019/07/24 04:30

ん~~~~~~ それでも同じエラーが起きてしまいます。。。。 すいません。。。。
hayataka2049

2019/07/24 04:33

最初からやり直す必要があります。それでも駄目なら今のところ思い付かないので、頑張ってください。
Pablito

2019/07/24 04:39

ありがとうございます。。 頑張ります。。
guest

0

yymm_purchaseというのはindexだと思うので

python

1s = df.loc['yymm_purchase'] 2df = pd.to_datetime(s)

だと思いますよ。

投稿2019/07/23 21:23

編集2019/07/24 01:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Pablito

2019/07/24 00:03

ご回答ありがとうございます。 ご指導通りに書いてみたのですが、 TypeError: unsharable type: 'list' というエラーが起きてしまいました。。。。 前までは先ほどのコード動いていたので、 原因がよくわかりません。
Pablito

2019/07/24 00:20

KeyError: "None of [Index(['yymm_purchase'], dtype='object')] are in the [index]"
Pablito

2019/07/24 00:21

s = df.loc[['yymm_purchase']] df = pd.to_datetime(s)
Pablito

2019/07/24 00:21

上のやり方だと↑↑のエラーが起きました。
退会済みユーザー

退会済みユーザー

2019/07/24 01:08

あなたのコードはこうなっていますが、 s = df.loc(['yymm_purchase']) locは関数ではないので s = df.loc['yymm_purchase'] こうです。
退会済みユーザー

退会済みユーザー

2019/07/24 01:09

すいません。 あとはわかりません。
guest

0

なにもしてないのにおかしくなった!
というのはそこらじゅうで聞きますねw

投稿2019/07/23 04:54

y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問