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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

1671閲覧

ディレクトリ内の全csvファイルでそれぞれ平均を求めて1ファイルへ出力したい

Cavy-Car

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/02/26 01:48

###ディレクトリ内の全csvファイルでそれぞれ平均を求めて1ファイルへ出力したい

超初歩的な質問恐縮です。
JupyterNotebook(Python3.8.3)を用い、ディレクトリ内の全CSVファイル50個(各500行×20列)について、各列の平均値をファイルごとに求め、それらを1つのcsvとして出力したいと思っています。

エラーメッセージ --------------------------------------------------------------------------- ParserError Traceback (most recent call last) <ipython-input-40-0db4b09ad2c7> in <module> 1 csv_file=os.listdir("/gs/hs0/tga-science/takeda/bindingsasa") 2 for file in csv_file: ----> 3 df = pd.read_csv(file) 4 ~/.local/lib/python3.8/site-packages/pandas/io/parsers.py in read_csv(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options) 608 kwds.update(kwds_defaults) 609 --> 610 return _read(filepath_or_buffer, kwds) 611 612 ~/.local/lib/python3.8/site-packages/pandas/io/parsers.py in _read(filepath_or_buffer, kwds) 466 467 with parser: --> 468 return parser.read(nrows) 469 470 ~/.local/lib/python3.8/site-packages/pandas/io/parsers.py in read(self, nrows) 1055 def read(self, nrows=None): 1056 nrows = validate_integer("nrows", nrows) -> 1057 index, columns, col_dict = self._engine.read(nrows) 1058 1059 if index is None: ~/.local/lib/python3.8/site-packages/pandas/io/parsers.py in read(self, nrows) 2059 def read(self, nrows=None): 2060 try: -> 2061 data = self._reader.read(nrows) 2062 except StopIteration: 2063 if self._first_chunk: pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.read() pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._read_low_memory() pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._read_rows() pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._tokenize_rows() pandas/_libs/parsers.pyx in pandas._libs.parsers.raise_parser_error() ParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2

該当のソースコード

ソースコード import pandas as pd csv_file=os.listdir("ワーキングディレクトリ") for file in csv_file: df = pd.read_csv(file) df.mean.to_csv("mean.csv")

試したこと

少し調べると上記エラーはファイルによって列columnが一定でないデータを読み込んだ際に生じるようです。各ファイルは同一のソフトウェアで同一操作で生成したため行列数は同じはずですが確認できていません。
なお、ここから先の平均値計算、ファイル出力は試せておりません。また、平均値を1つのファイルに出力する際にカラム名を計算元のファイル名に指定する事はできますでしょうか。
基本的な質問で大変申し訳ございませんが何卒よろしくお願い申し上げます。

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

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

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

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

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

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

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

bsdfan

2021/02/26 01:54

listdirの結果にcsvファイル以外のものが入っていないでしょうか。
Cavy-Car

2021/02/26 01:59

あ、当該JupyterNotebookのファイルUntitled.ipynbが入っていますね
Cavy-Car

2021/02/26 02:08

上記エラーは無くなったものの、 FileNotFoundError: [Errno 2] No such file or directory: '○○○.csv' が返されます。 ○○○.csv自体は単独でpd.read_csv("ディレクトリ/○○○.csv")で読み込めます。
t_obara

2021/02/26 02:12

その場所にcsvがないということなので、絶対パスで指定するか、スクリプトの実行時ディレクトリを考え、そこからの相対パスを指定するようにすべきです。
bsdfan

2021/02/26 02:14

os.listdir はファイル名だけを返すので、forループ内で pd.read_csv('ディレクトリ/' + file) のようにしてやる必要があります。このあたりが面倒だったら、glob.glob('ディレクトリ/*.csv') を使うのもよいです。
Cavy-Car

2021/02/26 03:11

ありがとうございます、下記globで各ファイルの平均を求める事はできました。 重ね重ね恐縮ですが、こちら元ファイル名をカラム名として1つのファイルに出力する方法ご存知でしたらご教示いただけますと幸いです。 csvfiles = glob.glob("ディレクトリ/*.csv") for file in csvfiles: df = pd.read_csv(file) mean = df.mean()
guest

回答2

0

その操作をマクロ記録すればいいです。

投稿2021/02/26 03:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Cavy-Car

2021/02/26 04:02

ご回答ありがとうございます。
guest

0

ベストアンサー

各csvに対してmeanをとったものをリストで持っておいて、最後にpandas.concatでひとつにまとめればいいです。
また、meanの結果のSeriesをrenameしておけば、ファイル名をカラム名にセットすることができます。

python

1import glob 2import os 3import pandas as pd 4 5means = [] 6csvfiles = glob.glob("ディレクトリ/*.csv") 7for file in csvfiles: 8 df = pd.read_csv(file) 9 mean = df.mean() 10 means.append(mean.rename(os.path.basename(file)) 11 12df_means = pd.concat(means, axis=1) 13# 行と列が逆のほうがよければ追加で 14# df_means = df_means.T 15 16df_means.to_csv("mean.csv")

投稿2021/02/26 03:33

bsdfan

総合スコア4571

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

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

Cavy-Car

2021/02/26 04:11 編集

分かりやすくありがとうございます、概要理解できました。 こちら試させていただきました所、means.appendがfor文に入っているせいか、meansに内容が追加されておらず空です。→すみません、ディレクトリの指定が間違っていました。やり直してみます。
bsdfan

2021/02/26 04:09

globのところで、ちゃんとファイルリストが取れているか確認してみてください。 means.append()はforのブロックに入っている必要があります。
Cavy-Car

2021/02/26 04:18

迅速なご対応誠にありがとうございます、無事に解決しました。 これからも精進します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問