概要
今回は社内にも未だ多く見られる、
「超重いcsvを開いて、特定条件でフィルタリングし、他の行を無くし、保存し直す作業」
を撲滅すべく、Pythonでのcsv操作自動化を説明いたします
レベルとしては大したものではありませんが、
営業職の方々はこういったものが地味にありがたかったりしますよね。
コピペや改変して使っていただいて全く構いません。
目的詳細
A列に社名が存在し、B列に取引日付が存在するcsv(カンマ区切り)を、
・B列の取引日付が、現在の月のものだけ
・A列の社名ごと
という条件でPythonによりcsvを自動で新規保存する。
下記の色ごとで単独のcsvが出来るイメージです。
作業の事前準備
・[必須]Pythonのインストール
先人の参考記事
Pythonには主要なバージョンで「Python」と「Python3」が存在し、
同時にインストールすると複雑なことになるため片方のみが推奨です。
・[必須]必要ライブラリのインストール
コマンドプロンプトもしくはターミナルを開いて以下のコマンドを実行してください。
(Python3のコード例を記載)
pip3 install pandas
pip3 install tkinter
・[推奨]VSCodeのインストール
先人の参考記事
必須ではないですが、メモ帳などに記載していくよりはこちらの方が快適です
完成品(サンプルコード)
さっそく作っていきましょう。
# ライブラリのインポート
# pandas : 表形式データを作成・フィルタリング・結合・グループ化・集計などの操作を行うライブラリ。csvを扱うこともできる。
import pandas as pd
# tkinter : Pythonの標準ライブラリ。GUI作成ができる。今回はファイル選択ダイアログに利用。
import tkinter as tk
from tkinter import filedialog
# datetime : 日付や時刻を操作するライブラリ。
import datetime
# tkinterでファイルダイアログを開き、CSVファイルを選択します
# Tkinterのルートウィンドウ(親ウィンドウ的なもの)を作成します。
root = tk.Tk()
# ルートウィンドウを非表示にします。
root.withdraw()
# ファイル選択ダイアログのGUIを表示し、CSVファイルを選択します。選択ファイルのパスがfile_pathに格納されます。
file_path = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
# pandasのread_csv関数を使い、選択したCSVファイルを読み込みます。その際に","を列の区切りとしている。
df = pd.read_csv(file_path, thousands=",")
# 実行時の月(つまり当月)を取得します
current_month = datetime.datetime.now().month
# 「取引日付」という項目がある列で、当月のみをフィルタリングします。日付データが違う行にある場合はここを変えてください。
filtered_df = df[df["取引日付"].apply(lambda x: datetime.datetime.strptime(x, "%Y/%m/%d").month) == current_month]
# 「取引会社」という項目がある列で、値ごとに分割します。重複の場合はまとめられます。
for value in filtered_df["取引会社"].unique():
value_filtered_df = filtered_df[filtered_df["取引会社"] == value]
# 各フィルタされたデータフレームをCSVファイルとして保存します
# ファイル名は参照した値に基づいて作成されます
value_filtered_df.to_csv(f"{value}.csv", index=False)
実行方法 および 期待挙動
① コマンドプロンプトやターミナルからファイルが存在するディレクトリにて
python3 csv_splitter.py
と実行してください(Python3の場合の記述)
※ファイル名はそれぞれの保存した名前にご変更ください。
② ダイアログが開くので、対象となるcsvファイルを選択します。
③ 会社ごとにcsvが保存されました。カレントディレクトリに保存されます。
ひとつ確認してみましたが期待通りの結果ですね
取引会社,取引日付,取引内容,販売額
わんわん株式会社,2023/03/13,首輪販売,2500
わんわん株式会社,2023/03/24,骨の販売,1000
あとがき
自分の業務も含め、まだExcelを整形するだけのルーティン作業は社内に溢れています。
Excelのマクロ機能を使うのもいいですが、そもそも重いExcelはマクロ実行のために開くだけで
相当のストレスを感じ、PCの待機時間もチリツモで結構ムダにしている気がします。
Pythonは今回のデータの場合だと0秒で完了したので、時間面はかなり優位に感じるため、
積極的に使う機会を見つけていきたいと思います。
このような非エンジニアでもかんたんに使えるプログラミング情報を載せていきたいと思うので良ければまた見てください