ysaz (ImanazaS) blog

最近はデータ分析や機械学習が中心。たまに音楽や書評。

Pandasでの複数ファイル読み込み

指定したフォルダ内に格納されている複数のファイルを読み込み、データフレームを作成する方法についての備忘録。

# 必要なパッケージの読み込み
import pandas as pd
import numpy as np

from datetime import date, datetime, timedelta
import time
import sys
import glob
import errno

# ファイルに日付データが含まれている前提で、開始日と終了日を指定する。
# データフレーム作成時にインデックスとして使用。
start = datetime(2015, 6, 1)
end = datetime(2016, 5, 31)
rng = pd.date_range(start, end)

# 次に関数を定義。xはパス名のうち省略したい部分を差す。
# データフレーム作成時、読み込みたいファイル名から、
# ディレクトリと拡張子を省いたものをカラム名とする。
def into_dataframe(path, x):   
    files = glob.glob(path)   
    df = pd.DataFrame()
    col = []
    list_ = []
    for name in files:
        try:
            # -4を入れることで拡張子を省く
            col.append(name[x:-4])
            d = pd.read_csv(name, sep='\t')
            list_.append(d.ix[:, 1:])
        except IOError as exc:
            if exc.errno != errno.EISDIR:
                raise
    df = pd.concat(list_, axis=1)
    df.index = rng
    df.columns = col
    return df

# データを読み込むパス名およびxを指定
path = '/Users/xxx/Documents/files/*.tsv'
df = into_dataframe(path, 100)

このように、ある程度ファイルのフォーマットが揃っている必要はあるが、複数のファイルを1つのデータフレームにまとめたいときに便利。