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

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

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

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

Q&A

解決済

2回答

2743閲覧

Python 東京都の平均気温出力時のエラーを解消したい

maxkey

総合スコア1

Python 3.x

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

0グッド

0クリップ

投稿2020/11/14 18:24

編集2020/11/15 06:42
import pandas as pd #PANDASでCSVを読み込む df = pd.read_csv("kion10y.csv", encoding="utf-8") # 日ごとに気温をリストにまとめる md = {} for i, row in df.iterrows(): m, d, v = (int(row["月"]), int(row["日"]), float(row["気温"])) key = str(m) + "/" + str(d) if not(key in md): md[key] = [] md[key] += [v] # 日付ごとに平均を求める avs = {} for key in md: v = avs[key] = sum(md[key]) / len(md[key]) print("{0} : {1}".format(key, v)) ```### 前提・実現したいこと Pythonで東京都10年間の平均気温を出すプログラムを作っています。 東京都の10年間の平均気温のCSVファイルをpandasで読み込んでから 平均気温を計算して出力したい内容です。 しかし、エラーが出ております。 コード ■■コードを実行したら以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ TypeError Traceback (most recent call last) C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key) 4410 try: -> 4411 return libindex.get_value_at(s, key) 4412 except IndexError: pandas\_libs\index.pyx in pandas._libs.index.get_value_at() pandas\_libs\index.pyx in pandas._libs.index.get_value_at() pandas\_libs\util.pxd in pandas._libs.util.get_value_at() pandas\_libs\util.pxd in pandas._libs.util.validate_indexer() TypeError: 'str' object cannot be interpreted as an integer During handling of the above exception, another exception occurred: KeyError Traceback (most recent call last) <ipython-input-23-b048decced88> in <module> 7 md = {} 8 for i, row in df.iterrows(): ----> 9 m, d, v = (int(row["月"]), int(row["日"]), float(row["気温"])) 10 key = str(m) + "/" + str(d) 11 if not(key in md): md[key] = [] C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key) 869 key = com.apply_if_callable(key, self) 870 try: --> 871 result = self.index.get_value(self, key) 872 873 if not is_scalar(result): C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key) 4417 raise InvalidIndexError(key) 4418 else: -> 4419 raise e1 4420 except Exception: 4421 raise e1 C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key) 4403 k = self._convert_scalar_indexer(k, kind="getitem") 4404 try: -> 4405 return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None)) 4406 except KeyError as e1: 4407 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\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: '月' ### 試したこと CSVデータの再読み込み、コードのチェックをしましたが、解消されません。 ### 補足情報(FW/ツールのバージョンなど) Python3.8

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

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

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

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

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

y_waiwai

2020/11/14 22:58

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
meg_

2020/11/15 01:37 編集

・コードは「コードの挿入」で記入してください。 ・"kion10y.csv"の内容を先頭10行程度載せてください。
maxkey

2020/11/15 06:46

y_waiwai様 ご確認いただきありがとうございます。 codeの枠内にコードを入力させていただきました。 meg_様 ご確認いただきありがとうございます。 コードは挿入から記載いたしました。 kino10y.csvの先頭を以下に記載いたします。 年, 月, 日, 気温, 品質, 均質 2006/1/1,3.6,8,1 2006/1/2,4.0,8,1 2006/1/3,3.7,8,1 2006/1/4,4.0,8,1 2006/1/5,3.6,8,1 2006/1/6,2.1,8,1 2006/1/7,2.8,8,1 2006/1/8,4.2,8,1 2006/1/9,3.7,8,1 2006/1/10,4.3,8,1 2006/1/11,6.1,8,1 2006/1/12,6.1,8,1 2006/1/13,4.0,8,1 2006/1/14,6.6,8,1 2006/1/15,10.7,8,1 2006/1/16,9.0,8,1 2006/1/17,8.0,8,1 2006/1/18,5.6,8,1 2006/1/19,4.2,8,1
guest

回答2

0

ベストアンサー

CSVデータ数4に対してタイトルが6つあり不整合です。

csv

1年, 月, 日, 気温, 品質, 均質 22006/1/1,3.6,8,1 32006/1/2,4.0,8,1 42006/1/3,3.7,8,1 52006/1/4,4.0,8,1 62006/1/5,3.6,8,1 72006/1/6,2.1,8,1 82006/1/7,2.8,8,1 92006/1/8,4.2,8,1

下記修正をしました。
1.タイトルを修正
(1)年, 月, 日を年月日にする
(2)余分な空白を削除する

csv

1年月日,気温,品質,均質 22006/1/1,3.6,8,1 32006/1/2,4.0,8,1 42006/1/3,3.7,8,1 52006/1/4,4.0,8,1 62006/1/5,3.6,8,1 72006/1/6,2.1,8,1 82006/1/7,2.8,8,1 92006/1/8,4.2,8,1

2.コードを下記の通り修正しました。

python

1import pandas as pd 2 3 #PANDASでCSVを読み込む 4df = pd.read_csv("kion10y.csv", encoding="utf-8") 5 6df["年月日"] = pd.to_datetime(df["年月日"]) 7df["月"] = df["年月日"].dt.month 8df["日"] = df["年月日"].dt.day 9 10 11# 日ごとに気温をリストにまとめる 12md = {} 13for i, row in df.iterrows(): 14 m, d, v = (int(row["月"]), int(row["日"]), float(row["気温"])) 15 key = str(m) + "/" + str(d) 16 if not(key in md): md[key] = [] 17 md[key] += [v] 18 19# 日付ごとに平均を求める 20avs = {} 21for key in md: 22 v = avs[key] = sum(md[key]) / len(md[key]) 23 print("{0} : {1}".format(key, v)) 24 25#1/1 : 3.6 26#1/2 : 4.0 27#1/3 : 3.7 28#1/4 : 4.0 29#1/5 : 3.6 30#1/6 : 2.1 31#1/7 : 2.8 32#1/8 : 4.2

投稿2020/11/15 07:49

meg_

総合スコア10605

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

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

maxkey

2020/11/15 12:44

ご丁寧に教えていただきありがとうございます。 おかげ様でエラーの意味が理解できました! 助かりました。
guest

0

コードが読めないんでアレですが、とりあえず、

TypeError: 'str' オブジェクトを整数として解釈することはできません

とおっしゃってますんで、そこらへんの変数のナカミをチェックしてみましょう。

投稿2020/11/14 23:00

y_waiwai

総合スコア87800

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問