0
0

Pythonでファイル名に目的の文字列を含むデータファイルを取得

Last updated at Posted at 2023-09-09

背景

他チームからデータファイルを連携されて集計や分析を依頼されることがある。
その際にファイルが1つにまとまっていると扱いやすいが、データの種類でファイルが分かれていたり、データ件数が多いために分割されて連携されることがあるので、それらをひとまとめにする作業の備忘録。
ファイル名を直接打ち込むことなく、条件に合ったファイルのみ取得しまとめることで、入力ミスや読み込みの漏れを解消することが目的。
ここでは簡易的に、Google Driveに格納されたIDごとのスコアのデータファイル複数とセグメントのデータファイル複数をひとまとめにすることを考える。
data.png

コード

import pandas as pd
import os
# データの格納場所を設定
PATH = '/content/drive/MyDrive/data'
# データの格納場所からファイル名の一覧を取得
files = os.listdir(PATH)
files

['data_score_1_20.csv',
'data_score_21_40.csv',
'data_score_41_80.csv',
'data_segment_41_80.csv',
'data_segment_1_20.csv',
'data_segment_21_40.csv']

# scoreのデータファイルのみファイル名を取得
target = 'score'
file_name_list = [file for file in files if target in file]
file_name_list.sort()
file_name_list

['data_score_1_20.csv', 'data_score_21_40.csv', 'data_score_41_80.csv']

# scoreのデータのみ読み込み、縦結合、id列をインデックスに設定
score_data = pd.DataFrame()
for read_file in file_name_list:
    tmp = pd.read_csv(os.path.join(PATH, read_file))
    score_data = pd.concat([score_data, tmp])

score_data.set_index('id', inplace=True)
score_data
id score
1 14
2 32
3 24
4 10
5 60
... ...
76 51
77 32
78 80
79 26
80 49
# segmentのデータファイルのみファイル名を取得
target = 'segment'
file_name_list = [file for file in files if target in file]
file_name_list.sort()
file_name_list

['data_segment_1_20.csv', 'data_segment_21_40.csv', 'data_segment_41_80.csv']

# segmentのデータのみ読み込み、縦結合、id列をインデックスに設定
segment_data = pd.DataFrame()
for read_file in file_name_list:
    tmp = pd.read_csv(os.path.join(PATH, read_file))
    segment_data = pd.concat([segment_data, tmp])

segment_data.set_index('id', inplace=True)
segment_data
id segment
1 5
2 1
3 2
4 4
5 5
... ...
76 2
77 3
78 5
79 5
80 5
# scoreのデータとsegmentのデータを横結合
merge_data = pd.concat([score_data, segment_data], axis=1)
merge_data
id score segment
1 14 5
2 32 1
3 24 2
4 10 4
5 60 5
... ... ...
76 51 2
77 32 3
78 80 5
79 26 5
80 49 5
0
0
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
0
0