🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

3848閲覧

複数のcsvを平均化する

Daaaaaaaaa

総合スコア10

Python

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

0グッド

0クリップ

投稿2021/01/21 13:08

編集2021/01/22 01:16

Pythonで複数のcsvから同じセル同士の平均値を出したいと考えています.
例:
データ1 データ2
1 2 3 4 5 6
7 8 9 1 5 6

データ平均
2.5 3.5 4.5
4 6.5 7.5
のように出したいです

データは縦の数はバラバラで,横は75個並んでいます。1つのcsvのデータが多くて他が少ない場合は0にして加算平均したいです。
現在出ているエラーについて悩んでいます.
エラー文の改善だけでなく,ほかにおかしい箇所があったら教えてほしいです。
どうかご教授お願いします.

Python

1import pandas as pd 2import csv 3 4average_array = [[0 for i in range(75)] for j in range(450)] 5 6#データ読み取り 7df1 = pd.read_csv('front1shugou.csv', header=None) 8df2 = pd.read_csv('front2shugou.csv', header=None) 9df3 = pd.read_csv('front3shugou.csv', header=None) 10df4 = pd.read_csv('s_front9shugou.csv', header=None) 11df5 = pd.read_csv('s_front11shugou.csv', header=None) 12df6 = pd.read_csv('s_front12shugou.csv', header=None) 13df7 = pd.read_csv('s_front18shugou.csv', header=None) 14df8 = pd.read_csv('s_front22shugou.csv', header=None) 15df9 = pd.read_csv('s_front23shugou.csv', header=None) 16df10 = pd.read_csv('s_front24shugou.csv', header=None) 17df11 = pd.read_csv('s_front26shugou.csv', header=None) 18df12 = pd.read_csv('s_front27shugou.csv', header=None) 19df13 = pd.read_csv('s_front28shugou.csv', header=None) 20df14 = pd.read_csv('s_front29shugou.csv', header=None) 21for i in range(len(df1.values)): 22 for j in range(len(df1[0].values)): 23 sum_temp = df1.values[i][j]+df2.values[i][j]+df3.values[i][j]+df4.values[i][j]+df5.values[i][j]+df6.values[i][j]+df7.values[i][j]+df8.values[i][j]+df9.values[i][j]+df10.values[i][j]+df11.values[i][j]+df12.values[i][j]+df13.values[i][j]+df14.values[i][j] 24 average_array[i][j] = sum_temp/14 25print(average_array) 26 27#データ書き出し 28with open('ave_data.csv', 'w') as file: 29 writer = csv.writer(file, lineterminator='\n') 30 writer.writerows(average_array) 31 32``````エラー 33sum_temp = df1.values[i][j]+df2.values[i][j]+df3.values[i][j]+df4.values[i][j]+df5.values[i][j]+df6.values[i][j]+df7.values[i][j]+df8.values[i][j]+df9.values[i][j]+df10.values[i][j]+df11.values[i][j]+df12.values[i][j]+df13.values[i][j]+df14.values[i][j] 34IndexError: index 75 is out of bounds for axis 0 with size 7

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

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

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

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

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

meg_

2021/01/21 13:58

> データは縦の数はバラバラで,横は75個並んでいます。 データ数がバラバラなのに「for i in range(len(df1.values)):」としているので発生しているエラーではないでしょうか?
Daaaaaaaaa

2021/01/21 14:06

どう変更すればエラーが出ないのでしょうか?
meg_

2021/01/21 14:10

> Pythonで複数のcsvから平均値を出したいと考えています. 「平均」とはどういう基準での平均でしょうか? 具体例があると回答しやすくなるかと思います。
Daaaaaaaaa

2021/01/21 14:15

異なるcsvの同じセル同士を平均したいと思っています。
meg_

2021/01/22 00:39

追加の説明は質問に追記しましょう。この欄ですと他の回答者の目に触れにくいです。
t_obara

2021/01/22 01:14

行数(縦の数)が異なるのであれば、多い分はどのように処理するのでしょうか
guest

回答1

0

ベストアンサー

簡単にするために下記データとします。

data1 1,2,3,4 5,6,7,8 data2 10,20,30,40

pandasを使用した例です。

python

1import pandas as pd 2df1 = pd.read_csv('data1') 3df2 = pd.read_csv('data2') 4 5rowcount = max(len(df1),len(df2)) 6columncount = len(df1.columns) 7if len(df1) < rowcount: 8 df1 = df1.append(pd.Series([0]*columncount),ignore_index=True) 9elif len(df2) < rowcount: 10 df2 = df2.append(pd.Series([0]*columncount),ignore_index=True) 11 12result = (df1 + df2) / 2 13print(result) 14# 0 1 2 3 15# 0 5.5 11.0 16.5 22.0 16# 1 2.5 3.0 3.5 4.0

説明のために2つのデータを扱っています。3つ以上のデータを扱う場合には適宜修正して使ってください。

投稿2021/01/22 01:28

meg_

総合スコア10736

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

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

Daaaaaaaaa

2021/01/22 01:52

結果の3行の意味がわからないのですが、詳しく教えてもらってもいいですか?
Daaaaaaaaa

2021/01/22 03:02

with open('ave_data.csv', 'w', newline = '') as file: writer = csv.writer(file) writer.writerows(result) こういったプログラムを追記し,結果をcsvに書き出そうと思ったのですが、 writer.writerows(result) _csv.Error: iterable expected, not int というエラーが出てしましました。 これはデータが多すぎるというエラーなのでしょうか?
Daaaaaaaaa

2021/01/22 03:37

理解できました。ご親切にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問