LoginSignup
3
7

More than 3 years have passed since last update.

pythonでフォルダ内の大量のCSVファイルを統合する(ヘッダー無しデータ)

Posted at

はじめに

  • 大量のCSVファイルを1つのCSVファイルに統合します。

事前準備

  • CSVファイルのヘッダーは無しのデータを用意する。
  • 統合したいCSVファイルをフォルダにまとめておく。
  • 統合した結果の出力ファイル名を指定する。

コード


import csv, os
import pandas as pd

#CSVファイルがあるフォルダを指定 (1)参照先
csv_folder_path = os.path.join(".","csv_folder", "headerRemoved")

#ファイル名の一覧をリスト形式で取得
csv_files_list = os.listdir(csv_folder_path)

#全てのcsvファイル内の行を格納するリストを作成
csv_rows=[]

#読み込むファイルリストからファイル名を指定し、全行をcsv_rowsリストに格納する。
for csv_filename in csv_files_list:
    csv_file_obj = open(os.path.join(csv_folder_path, csv_filename))
    reader_obj = csv.reader(csv_file_obj)
    for row in reader_obj:
        csv_rows.append(row)
csv_file_obj.close()

#リストをdataframe型に変換.
df = pd.DataFrame(csv_rows)

#書き出す列の範囲を指定する(0~44番のみ) (3)書き出し範囲
df = df.iloc[:,range(0,44)]

#dataframeをcsvに変換して保存 (2)出力ファイル名
df.to_csv(os.path.join(".","merged_file.csv"), index=False)

解説

  • CSVファイルがあるフォルダからファイル名のリストを取得
  • ファイル名リストに沿ってファイルごとにファイルオブジェクトを作成、さらにそこからReaderオブジェクトを作り一行ずつファイルから行を読み込む
  • すべてのファイルで繰り返し、最終的に1つのリストの全ファイルの全行を集める
  • 書き出す前にリストをDataFrame型に変換する。
  • ここでは書き出す前に必要な列の範囲を指定している。
  • 最後にpd.to_csvで指定したファイル名のCSVファイルに書き出す。このときindex=Falseとすることでindexは書き出さない。

感想

  • ちなみにdfに変換されているので任意の列だけを表示を取り出すことができる。 下記のようにすれば12列目、38列目をこの順序で指定できる。
df.iloc[:,[38,12]]
  • 次はdfから色々なグラフをプロットしたい。
3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7