24
34

More than 5 years have passed since last update.

python3で多数のcsv連結

Last updated at Posted at 2018-10-25

はじめに

タイトル通りです。
pythonである必要性はないのですが、

csvデータ複数取得 → pythonでcsv連結 → Jupyterでクラスタリング
csvデータ複数取得 → pythonでcsv連結 → 自然言語処理

等、開発環境をいちいち変えないようにできたらデータ管理しやすいですし、ある程度スムーズに作業できます。

前準備

今回は協調フィルタリング用に準備したファイルを使います。1列目に利用者ID、2列目は分解したコメントデータで構成されています。
1.png

フォルダの場所は実行pythonファイルと同じディレクトリにある前提です。
main/
 ├ csvフォルダ/
 └ 実行pythonファイル/

# -*- coding: utf-8 -*-
import os
import glob
import csv
import pandas as pd

# フォルダ中のパスを取得
DATA_PATH = "./<csvフォルダ名>/"
All_Files = glob.glob('{}*.csv'.format(DATA_PATH))

csv連結

# フォルダ中の全csvをマージ
list = []
for file in All_Files:
    list.append(pd.read_csv(file))
df = pd.concat(list, sort=False)

csv出力

わかりやすい名称を付けて結果をcsv形式で出力します。

df.to_csv('<*>.csv', encoding='utf_8')

結果1

1.png
1.png

自動的に'Unnamed: 0'という列が追加されています。python特有の仕様か私にはわかりませんが、修正しておきましょう。

# フォルダ中の全csvをマージ
list = []
for file in All_Files:
    list.append(pd.read_csv(file))
df = pd.concat(list, sort=False)
del df['Unnamed: 0']

# csv出力
df.to_csv('comm_datas.csv', encoding='utf_8')

del df['Unnamed: 0']を出力コードの手前に追加しました。再度出力結果を確認します。

結果2

1.png

目的の列は削除されていますね。これにて完了です。

追記

出力されたデータですが、'utf_8'形式ですのでExcelで開くと当然文字化けします。そちらで確認したい場合にはエンコード形式を変えましょう。
一例:

# csv出力
df.to_csv('comm_datas.csv', encoding='utf_8_sig')
24
34
1

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
24
34