はじめに
- 複数ファイルのエクセルファイルとCSVファイルを統合する必要があったので、pandaが使えると思い調査してみる。
pandasのインストール
pip install pandas
pandasを動かしていると下記のエラーに遭遇する
Case1
- 下記のエラーが発生した場合、xlrdがインストールされていないか、古い可能性あるため、最新版をインストールする
ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.
pip install xlrd
Case2
- Pandasで処理したデータをエクセルファイルに出力するときに下記のパッケージが必要になる。
ModuleNotFoundError: No module named 'openpyxl'
pip install openpyxl
Case3
- excelファイルに出力する際に下記のエラーが発生するケースがある
openpyxl.utils.exceptions.IllegalCharacterError
pip install xlsxwriter
サンプルコード
エクセルファイルを統合する
import os
import pandas as pd
target_folder = '<エクセルファイルが格納されえちるフォルダ>'
csv_list = []
for curDir, dirs, files in os.walk(target_folder):
for ex_file in files:
if '.xlsx' in ex_file:
try:
print(f"{curDir}/{ex_file}")
csv_list.append(pd.read_excel(f"{curDir}/{ex_file}"))
except:
print(f"Error {curDir}/{ex_file}")
df = pd.concat(csv_list, sort=False)
df.to_excel('all_excel.xlsx', sheet_name='統合', engine='xlsxwriter')
CSVファイルを統合する
csv_list = []
for curDir, dirs, files in os.walk(target_folder):
for csv_file in files:
try:
print(f"{curDir}/{csv_file}")
csv_list.append(pd.read_csv(f"{curDir}/{csv_file}",encoding="cp932"))
except:
print(f"Error {curDir}/{csv_file}")
df = pd.concat(csv_list, sort=False)
# csv出力
df.to_csv('all_csv.csv', encoding='utf-8-sig')
まとめ
- pandasでCSVファイルの一括読み込みをしたが処理速度が速かった。エクセルはCSVファイルの読み込みより時間が掛かったが、他の言語で書くよりコード量が少なく処理速度が速いと思った。