2016-10-03 7 views
0

My DataFrameにはインデックスSubjectIDがあり、各Subject IDには独自のディレクトリがあります。各Subjectディレクトリには、DataFrameに入れたい情報が入った.csvファイルがあります。 SubjectIDインデックスを使用して、すべての件名の.csvファイルのヘッダーを読み込み、DataFrameの新しい列に挿入します。異なるディレクトリから複数の.csvファイルをパンダに読み込むDataFrame

各サブジェクトディレクトリは、個々のサブジェクト番号を除いて同じパスウェイを持ちます。

複数の.csvファイルを単一のターゲットディレクトリから複数のディレクトリからではなく、pandas DataFrameに読み込む方法が見つかりました。

subject_path = ('/home/mydirectory/SubjectID/') 
filelist = [] 
os.chdir('subject_path') 
for files in glob.glob("*.csv") : 
    filelist.append(files) 

# read each csv file into single dataframe and add a filename reference column 
df = pd.DataFrame() 
columns = range(1,100) 
for c, f in enumerate(filelist) : 
    key = "file%i" % c 
    frame = pd.read_csv((subject_path + f), skiprows = 1, index_col=0, names=columns) 
    frame['key'] = key 
    df = df.append(frame,ignore_index=True) 

私は似た何かをするが、繰り返しの代わりに、単一のターゲットディレクトリを持つの異なる件名ディレクトリに行きたい:ここでは、ターゲットディレクトリから複数の.csvファイルをインポートするための私が持っているいくつかのコードです。

編集

: は私がいない pandas osを使用して、これを行うにしたいと思います、 osを使用して複数のディレクトリを検索するためにループを使用する方法はありますか?

+0

を上記のコードは、私は単一のディレクトリから.CSVインポートするための試してみましたが、問題は、私はないですということは何かということです。だから、非対象のcsvファイルがそれに応じてre.match()を調整する他、存在するかどうかを確認してくださいこれを複数のディレクトリからファイルをインポートするためにどのように適応させるか。 – MScar

+0

ループを使用して複数の件名パスを検索することはありますか? –

+0

'os'を使ってこれをしたいですか?これはパンダで成し遂げられるようには見えません – MScar

答えて

0

件名のフォルダがmydirectoryであると仮定すると、ディレクトリ内のすべてのフォルダのリストを作成してから、ファイルリストにcsvを追加することができます。

import os 

parent_dir = '/home/mydirectory' 
subject_dirs = [os.path.join(parent_dir, dir) for dir in os.listdir(parent_dir) if os.path.isdir(os.path.join(parent_dir, dir))] 

filelist = [] 
for dir in subject_dirs: 
    csv_files = [os.path.join(dir, csv) for csv in os.listdir(dir) if os.path.isfile(os.path.join(dir, csv)) and csv.endswith('.csv')] 
    for file in csv_files: 
     filelist.append(file) 

# Do what you did with the dataframe from here 
... 
0

は、トップダウン(デフォルト= TRUE)またはボトムアップすべてのディレクトリとファイルを読み取るためにos.walk()の再帰的な方法を考えてみましょう。さらに、regexを使用して名前を確認すると、.csvファイルのみをフィルタリングすることができます。

以下は、ターゲットルート/home/mydirectoryから子/孫フォルダのすべてのcsvファイルをインポートします。

import os, re 
import pandas as pd 

# CURRENT DIRECTORY (PLACE SCRIPT IN /home/mydirectory) 
cd = os.path.dirname(os.path.abspath(__file__)) 

i = 0 
columns = range(1,100) 
dfList = [] 

for root, dirs, files in os.walk(cd): 
    for fname in files: 
     if re.match("^.*.csv$", fname): 
      frame = pd.read_csv(os.path.join(root, fname), skiprows = 1, 
           index_col=0, names=columns) 
      frame['key'] = "file{}".format(i) 
      dfList.append(frame)  
      i += 1 

df = pd.concat(dfList) 
関連する問題