【Python】複数のファイルを読み込んだデータフレームに該当ファイル名を入力する

こんにちは、@Yoshimiです。

データフレームを作成する際、どのデータから読み込まれているのかを把握しておくと意外と便利だったりします。どんなデータが読み込まれているのか表示しておくプログラムを紹介します。

概要

  • mac os
  • python 3.8
  • Jupyter Notebook 利用

data
├ data_01.csv
├ data_02.csv
├ data_20.csv

csv_data
├ 空のディレクトリ・・・あとで使います。

dataというフォルダに複数CSVが格納されています。この格納されてるデータを結合し、結合したデータの1つ1つにどのファイルから読み込まれたのかをまとめたデータフレームにします。ファイル名はfileというカラムを作成し、入力していきます。

最終形態はこうです。

コード

基本モジュールを読み込みます。

import numpy as np
import pandas as pd
import glob
import os

dataディレクトリにあるCSVをまとめます。

data_lists = glob.glob('data/*.csv')
data_lists
[‘data/data_20.csv’, ‘data/data_01.csv’, ‘data/data_02.csv’]

fileカラムに入力する値を確認します。ファイルまでのPATHは不要です。os.path.basename()を使います。

f_name = os.path.basename(data_lists[1])
f_name
‘data_01.csv’

データの中身を確認しておきます。

df_sample = pd.read_csv('data/data_01.csv')
df_sample

今回のデータは、

  • 全てのカラムに欠損値がある行がある
  • 重複caseが存在する

データで欠損値は処理を行う必要があります。全てのカラムで欠損値が見られるのであればその行は削除しても問題ないでしょう。ということで削除対象です。削除処理も合わせて行います。

流れはこうです。

  1. csvファイルを読み込む
  2. 欠損値の行を削除
  3. ファイル名を変数に代入
  4. fileカラムを作成し、任意(今回は2番目)にカラム追加
  5. 出力用の変数作成
  6. csv_dataフォルダにcsvを出力

の流れをfor文でdata_listsの数だけ回します。

for i in range(len(data_lists)):
    df = pd.read_csv(data_lists[i])
    df = df.dropna(how='all')
    file_name = os.path.basename(data_lists[i])
    df.insert(2, 'file', file_name)
    csv_name = os.path.splitext(os.path.basename(file_name))[0]
    df.to_csv('csv_data/'+ csv_name + 'Edit.csv')

出力されたCSVのファイル名でリストを作成します。

df_files = glob.glob('csv_data/*.csv')
df_files
[‘csv_data/data_20Edit.csv’,
‘csv_data/data_01Edit.csv’,
‘csv_data/data_02Edit.csv’]

リストを結合ます。

df = [pd.read_csv(df_files[i], parse_dates=[0]) for i in range(len(df_files))]
df_all = pd.concat(df, ignore_index=True)
df_all

結合されたデータを確認します。

この後の処理としては、使い所にもよります。

  • 同じIDをまとめる
  • カウントする
  • 文字列を結合する
  • 平均をとる

などなど、目的に合わせた使い方ができると思います。

ファイルの置き場所、読み込まれる場所、出力先などはもちろんお任せします。

最後に

「データ分析にファイル名いるの?」というツッコミがあると思いますが、私もそう思っていました。しかし、全件チェックしないといけないデリケート案件はAIの判定を理由に「確認しなかった」ということはあってはいけないことだと思います。

『ドクターX ~外科医・大門未知子~』でAIを取り入れ病名を判断し、それに従って処方をするという場面がありましたが、正直怖いなと思いました。一方、AIの限界というのも感じられた場面でもありました。


なりたい自分になれる
スキルアップならUdemy

私も利用し、高収入エンジニアになったのよ。未経験から機械学習、データサイエンティスト、アプリ開発エンジニアを目指せるコンテンツが多数あります。優秀な講師が多数!割引を利用すれば1,200円〜から動画購入可能です。!

ABOUTこの記事をかいた人

大学卒業して、キラキラしていたのでIT業界にはいりましたが、中身はブラックでした!!だから、投資技術を磨いて早くリタイヤしたいです。株価、Python、機械学習をもうもう勉強中です。経済的自由を手に入れて農家やりたい!