質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

23329閲覧

複数ファイルの連続処理、データフレーム名の変数化を行いたい

tora12

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

9クリップ

投稿2017/04/25 03:54

複数ファイルの連続読み込み、処理

ディレクトリ内の複数のCSVファイルを読み込み、
例えば連番でデータフレーム(名称を可変、変数にしたい※)を作成し、後続処理に進めたい。
※または今後は月次でファイルが増えていく想定のため、データフレームの配列(3次元)に格納する形がよさそう。

python初心者のため、データフレーム名を変数としたり、グローバル化したりするところがまだ分かっていないため考えた処理が実行出来ていません。またはPythonらしい違うアプローチをご教示頂ければありがたいです。

1ディレクトリ内に1か月分、数十ファイル、かつ複数ディレクトリに存在するため閲覧性が非常に悪い状況ですので、今後定型、非定型の分析レポートを作成するために、まとめて処理したいと考えています。ディレクトリ内の複数ファイル名を取得するところは一応出来ています。

ご教示よろしくお願いいたします。

###該当のソースコード

python

1 2import pandas as pd 3#import numpy as np 4#import pickle 5#import zipfile 6import os 7import sys 8 9 10#データ読み込み関数 1ファイルを読み込み 11def read_file( i, path, rfile ): 12 13 filepath = r"{0}\{1}".format(path,rfile) 14 tmp_data = pd.read_csv( filepath, 15 encoding="sjis", 16 nrows=100, #今だけ100行に制限 17 header=None 18 ) 19 20 #カラム名を設定 21 tmp_data.columns =['ID', 'name','score'] 22 # ファイル内に科目名を示す情報がないため列(index)を追加 23 tmp_data['nm_filenumber'] = '{0:02d}'.format(i) 24 return tmp_data 25 26##ディレクトリ以下の全ファイルを繰り返し処理 27target_dir = r"\\Server\Readonly\ClientA\17年2月" 28 29for i, filename in enumerate( os.listdir(target_dir)): 30 print(i, filename ) 31 32# ここで展開したファイル名を次々にデータ化したい、このループ内を想定。 33# 一旦ループの外で、手入力すると下記の様になる。 34 35df_01 = read_file( 1, target_dir, r"ClientA_KOKUGO_201702.csv" ) 36df_02 = read_file( 2, target_dir, r"ClientA_RIKA_201702.csv" ) 37df_03 = read_GC( 3, target_dir, r"ClientA_SANSU_201702.csv" ) 38#... 続く 39 40# 後続処理 41# 上記データを全て横結合 42# 上記データを全て縦結合

##環境
現在はwindowsです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どこまでを回答に求めているのがが、いまひとつ分からなかったのですが、

とりあえず、指定したディレクトリ内のCSVファイルを全てまとめてデータフレーム化するサンプルを挙げておきます。

Pyton

1import pandas as pd 2import glob 3import os 4 5DATA_DIR='./data' 6 7files = glob.glob(os.path.join(DATA_DIR,'*.csv')) 8df_list=[] 9for file in files: 10 tmp_df = pd.read_csv(file, header=None, names=['ID', 'name', 'score'], encoding="sjis") 11 tmp_df['filename'] = os.path.basename(file) 12 df_list.append(tmp_df) 13df = pd.concat(df_list, ignore_index=True) 14 15print(df)

上のサンプルではサブディレクトリは対象を外しておりますが、サブディレクトリを含めるときは

Python

1files = glob.glob(os.path.join(DATA_DIR,'**/*.csv'), ecursive=True)

となります。

投稿2017/04/25 05:05

編集2017/04/25 06:05
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tora12

2017/04/25 05:56

早速ありがとうございます!試してみたいと思います、改めて質問させてください。
tora12

2017/04/26 06:01

頂いたコードを参考に、目的の処理が実現出来ました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問