2016-11-22 42 views
0

私はPythonの初心者です。私は自分の問題を調査しましたが、正確な要件を見つけることができませんでした。Pythonを使用して複数のcsvファイルの各列の平均を取る

実験的測定ごとに複数のファイルが採点されているフォルダがあります。彼らの名前は傾向に従う。 XY0001.csv,XY0002.csv ... XY0040.csv。私はこれらのファイルをすべて読み込み、すべてのファイルの各列の平均を取って、同じ形式で 'result.csv'に格納します。

+0

[複数のcsvファイルをパンダにインポートして1つのDataFrameに連結]可能な複製(http://stackoverflow.com/questions/20906474/import-multiple-csv-files-into-pandas-and-concatenate-into- 1つのデータフレーム) – Guido

答えて

1

パンダ(import pandas as pd)を使用することをお勧めします。私はpd.read_csv()を使ってファイルを読むことから始めることを提案します。ファイルの読み方は、CSVファイルの形式によりますが、ここからは分かりません。ディレクトリ内のすべてのファイル(この問題の最も簡単な解決方法)を読みたい場合は、read all filesを使用してみてください。

次に、pd.concat()を使用してすべてのファイルを連結できます。最後に、生成するメトリックを計算できます(検索機能を使用して、各メトリックを計算する方法を見つけることができます)。あなたのために多くのことをする素敵な機能は、describe functionです。

0

以下はglobモジュールを使用して、X*.csvの形式の現在のフォルダ内のすべてのファイルのリスト、つまりxで始まるすべてのCSVファイルのリストを取得します。見つかったファイルごとに、最初にヘッダー行をスキップし(オプション)、zip()トリックを使用して残りの行をすべてロードして、列のリストに行のリストを転置します。

各列について、各セルを整数に変換して値を合計し、この合計を検出された要素の数で割って各列の平均を求めます。次のように

Col1,Col2,Col3 
6,1,10 
2,1,20 
5,2,30 

result.csvが書き込まれます:あなたは含むXY0001.csvを持っていたのであれば

import glob 
import csv 

with open('result.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output) 

    for filename in glob.glob('X*.csv'): 
     print (filename) 

     with open(filename, newline='') as f_input: 
      csv_input = csv.reader(f_input) 
      header = next(csv_input) 
      averages = [] 

      for col in zip(*csv_input): 
       averages.append(sum(int(x) for x in col)/len(col)) 

     csv_output.writerow([filename] + averages) 

:それから、フォーマットfilename, av_col1, av_col2などで、あなたの出力result.csvに値を書き込み

XY0001.csv,4.333333333333333,1.3333333333333333,20.0 

Python 3.5.2を使用してテスト済み

0

複数のファイルにアクセスするには、globモジュールを使用できます。

import glob 

path =r'/home/root/csv_directory' 
filenames = glob.glob(path + "/*.csv") 

Pythonのpandasモジュールは、CSVファイルを解析する方法があります。また、csvファイルを管理および処理するオプションもあります。

import pandas as pd 

dfs = [] 
for filename in filenames: 
    dfs.append(pd.read_csv(filename)) 

.read_csv() parse csvファイルには、メソッドが使用されます。 1つのデータフレーム及び処理のために容易にすべてのデータを連結するために使用

pd.concat(dfs, ignore_index=True) 
.concat()

関連する問題