目次
はじめに
今回は、データの前処理をPythonで行えば高速処理できるのではないかと思いトライアルしてみました。
実行作業の確認
今回実行したい作業は、C~Eの列をB列の下に縦おきを行い、A列2行目はB列の積み上げた最後の行まで繰り返すという内容です。
では、コードを見ていきましょう。
番外編
sample code
import pandas as pd
import tkinter as tk
from tkinter import filedialog
import os
# ————————-
# 1. ファイル選択ダイアログ
# ————————-
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(
title=“変換するCSVファイルを選択してください”,
filetypes=[(“CSV Files”, “*.csv”)]
)
if not file_path:
print(“❌ ファイルが選択されませんでした。終了します。”)
exit()
# ————————-
# 2. CSV読み込み(utf-8-sig)
# ————————-
df = pd.read_csv(file_path, encoding=‘utf-8-sig’)
# ————————-
# 3. 縦長に変換(pandas melt で高速処理)
# ————————-
# 列名の取得(1列目:日付、2列目:メイン製品、残りを展開対象)
id_col = df.columns[0] # 例: ‘Date’
value_col = df.columns[1] # 例: ‘Product’
melt_cols = df.columns[2:] # 例: ‘Product A’〜
# メイン製品(2列目)のデータを準備
main_df = df[[id_col, value_col]].copy()
main_df.insert(1, ‘プロダクト名’, value_col)
main_df.columns = [id_col, ‘プロダクト名’, ‘値’]
# 追加製品(3列目以降)の melt 処理(高速)
melted_df = df.melt(id_vars=[id_col], value_vars=melt_cols,
var_name=‘プロダクト名’, value_name=‘値’)
# 結合(上に main_df、下に melt 結果)
final_df = pd.concat([main_df, melted_df], ignore_index=True)
# ————————-
# 4. 保存(utf-8-sig)
# ————————-
output_path = os.path.splitext(file_path)[0] + “_transformed.csv”
final_df.to_csv(output_path, index=False, encoding=‘utf-8-sig’)
print(f“✅ 変換が完了しました!\n出力ファイル:{output_path}“)