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

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

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

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

Q&A

解決済

1回答

1408閲覧

Pythonを用いて,エクセルの特定の行に対して平均を取りたいです.

Shgm

総合スコア3

Python

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

0グッド

1クリップ

投稿2020/12/06 10:47

編集2020/12/06 18:43

Pythonを用いて,エクセルの特定の行に対して平均を取りたいです.

ある課題を遂行中で,
下図のようなものの分析を行っています.

そこで,
同一のID行に対して,
それに対応するC/Noの値の平均を一つずつ算出したしです.
(例)最初の黄色いID群に対して→右側のC/No9個の平均を出す
次の赤いID群に対して→右側のC/No10個の平均を出す
・・・以下同
それを順番を替えずに出力したいです.

イメージ説明

イメージ説明
▲現状こうなっております.

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

平均が取れずに困っております.

該当のソースコード

Jupyternotebook

1import openpyxl 2from pprint import pprint 3 4#CNoリスト 5cno_list = [] 6 7wb = openpyxl.load_workbook('sample.xlsx') 8 9ws = wb["sheet1"] 10 11for row in ws.iter_rows(min_row=2): 12 values = [] 13 for c in row: 14 values.append(c.value) 15 cno_list.append(tuple(values)) 16 17pprint(cno_list)

試したこと

色々やってはみたのですが,
如何せん初めてで困っております????

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

最終的には,
各ID群に対して一個ずつの平均が得られ,
それをまた順番を変えずにエクセルファイルで出力したいです.

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

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

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

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

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

nto

2020/12/06 11:30

1-1-というシート名はExcelファイル上に存在していないというエラーが先行している様ですが正しくシート名は指定できていますか?
Shgm

2020/12/06 12:11

そちらは指定出来てます!(EXCELの下部の名前ですよね……?)
gasbombe

2020/12/06 14:42

シート名を正しく入力しているのに対象のシートが無いというエラーが出る、という問題でいいですか?
Shgm

2020/12/06 16:33

そうであります!
guest

回答1

0

ベストアンサー

openpyxlで書くなら辞書とリストを使うのが良いと思います。

python

1import openpyxl 2 3#CNoリスト 4cno_list = [] 5 6wb = openpyxl.load_workbook('sample.xlsx') 7 8ws = wb["sheet1"] 9 10groups = {} 11for row in ws.iter_rows(min_row=2): 12 if row[0].value in groups: 13 groups[row[0].value].append(row[1].value) 14 else: 15 groups[row[0].value] = [] 16 groups[row[0].value].append(row[1].value) 17 18for i in groups: 19 print(sum(groups[i]) / len(groups[i])) 20

投稿2020/12/07 00:51

編集2020/12/08 01:01
meg_

総合スコア10605

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

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

Shgm

2020/12/07 05:02

ご回答いただきありがとうございます! 後で試してみたいのですが、これならば、1列目のID群の平均、2列目のID群の平均……と順番に出力されますでしょうか?
meg_

2020/12/07 06:39

ID毎に値のリストを作成しているのでできるはずです。実際にコードを動かして試してください。
Shgm

2020/12/07 18:14 編集

ありがとうございます!試したところ, TypeError Traceback (most recent call last) <ipython-input-2-4acd7dc865b5> in <module>() 18 19 for i in groups: ---> 20 print(sum(groups[i] / len(groups[i]))) TypeError: unsupported operand type(s) for /: 'list' and 'int' と出てきます!どうしたら良いでしょうか……
meg_

2020/12/08 01:02

コードを修正しました。失礼しました。
Shgm

2020/12/08 01:23

出来ました!!!!!!!!!!失礼なんかありません!!!!ありがとうございます!!!!!!!
Shgm

2020/12/11 06:54

ちなみにコチラのpprintで出てきた数字列をExcelに出力する場合はどうしたら良いでしょうか?
meg_

2020/12/11 08:47

ws['A1']=sum(groups[i]) / len(groups[i]) とか ws.cell(row=1,column=1).value=sum(groups[i]) / len(groups[i]) とかでしょうか?
Shgm

2020/12/11 10:11

ありがとうございます!試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問