Pythonで複数のCSVデータを1つのファイルにまとめてみた

Pythonを使って、複数のCSVファイルを1つにまとめてみました。

目次

  1. やりたいこと
  2. 作ったプログラム
  3. 試してみた

やりたいこと

実験のログデータなどで、測定値が1つずつ改行されて記録される下記のようなデータがあるとします。

sin
0
0.001
0.001999999
0.002999996
0.003999989
0.004999979
0.005999964
0.006999943
0.007999915
0.008999879
0.009999833
0.010999778
0.011999712
0.012999634
0.013999543
0.014999438
0.015999317
0.016999181
以降省略

こういうデータを沢山とって、それをExcelで1つのグラフにまとめて表示したいことはよくあります。

これらのデータを1つずつExcelで開いて1つのシートにコピーするというのは、ファイルの数が少なければ問題ありませんが、数十ファイルを超えてくると苦痛になります。

ということで、Pythonに1つのCSVファイルにまとめてもらいます。

作ったプログラム

import csv
import sys

fn = sys.argv[1:]

data_array = []
for read_file in fn:
    with open(read_file, mode='r', newline='', encoding='utf-8') as fi:
        csv_reader = csv.reader(fi)
        read_data = [row for row in csv_reader]
        if len(data_array) < 1:
            data_array = read_data
        else:
            for i in range(len(read_data)):
                data_array[i].extend(read_data[i])

with open('result.csv', mode='w', newline='', encoding='utf-8') as fo:
    csv_writer = csv.writer(fo)
    csv_writer.writerows(data_array)

結合するCSVファイルを、スクリプトの引数に指定します。

csvモジュールを使ってCSVファイルを読み込み、1つめの場合はそれを基準のリストにして、2つめ以降のファイルの場合は基準のリストに要素をextendしていきます。

結合するCSVファイルの要素数(行数)が違っていたりすると、エラーになります。

結合したデータをresult.csvという名前のファイルに出力します。

試してみた

CSVデータを3つ用意して、結合してみました。 正弦(sin.csv)、余弦(cos.csv)、正接(tan.csv)です。

それぞれが、冒頭のようなCSVファイルになっています。

上記のスクリプトをtest.pyという名前にして、実行します。

$ python test.py sin.csv cos.csv tan.csv

出力されたファイルは下記のようになりました。

sin,cos,tan
0,1,0
0.001,0.9999995,0.001
0.001999999,0.999998,0.002000003
0.002999996,0.9999955,0.003000009
0.003999989,0.999992,0.004000021
0.004999979,0.9999875,0.005000042
0.005999964,0.999982,0.006000072
0.006999943,0.9999755,0.007000114
0.007999915,0.999968,0.008000171
0.008999879,0.9999595,0.009000243
0.009999833,0.99995,0.010000333
0.010999778,0.999939501,0.011000444
0.011999712,0.999928001,0.012000576
0.012999634,0.999915501,0.013000732
0.013999543,0.999902002,0.014000915
0.014999438,0.999887502,0.015001125
0.015999317,0.999872003,0.016001365
0.016999181,0.999855503,0.017001638
以降省略

このファイルをExcelで開いて、グラフを描いてみると、こうなります。

Excelでグラフを描いた図

広告

作ってみたカテゴリの投稿