JDLの税務システムを使用していると、Client File Managerという管理画面から”会社基本情報”のデータをCSVファイルで出力することができるのですが、そのCSVファイルは文字列の各項目の右側に空白が含まれています。
VBAでは全てのセルを検索して空白があればそれを削除する処理をしていましたが、同じことをPythonのpandas.DataFrameで行ったらどうなるかと思ってやってみました。
プログラムのコードは以下の通りです。
import pandas as pd
import shutil
#タイトル行を除いて読み込むことで列番号を列名にする
df = pd.read_csv('会社基本情報.csv', header=None, skiprows=4,encoding = 'cp932')
#各列についてdtypeがobjectである場合に要素の右側の空白を削除する
#dtypeがobjectでない場合に同じ処理を行うとエラーになる
for i in range(110):
if df[i].dtype == object:
df[i] = df[i].str.rstrip()
else:
continue
#タイトル行のみのファイルをコピーして書き込み用のCSVファイルとする
shutil.copyfile('title.csv','temp.csv')
#CSVファイルに追記モードで書き込み
df.to_csv('temp.csv',mode = 'a',index = False,header = False,encoding = 'cp932')
前提としてはカレントディレクトリに
- “会社基本情報.csv”ファイル
- “会社基本情報.csv”のタイトル行だけのファイル”title.csv”
が置いてあることです。
if文で列のdtypeを判定して処理を分けていますが、CSVファイルをDataFrameに読み込む際に
df = pd.read_csv(‘会社基本情報.csv’, header=None, skiprows=4,encoding = ‘cp932’,dtype = ‘object’)
と記述してdtypeを指定してしまえば処理を分ける必要はありません。