弥生会計のデータをPythonでJDLIBEX出納帳のデータに変換する

以前にExceで行ったものをPythonで行ってみました。

「弥生会計のデータをJDLIBEX出納帳のデータに変換する」と言っても、具体的には

  • 科目名称を科目コードに変換する
  • 補助科目名称を補助科目コードに変換する
  • 消費税のコードを変換する

という3つのことをvlookup関数で行っていただけです。

今回はそれをPythonのpandasのmergeを使ってやってみました。

以前にExcelで行った時と同じように、上記3つの変換のために使う対応表のデータは手作業で作成しなければなりません。

科目名称と科目コードの対応表(kamoku.csv)

弥生 科目名,JDL 科目コード
現金,111
小口現金,112
・・・

補助科目名称と補助科目コードの対応表(hojo.csv)

所属勘定科目,補助科目,JDL補助
普通預金,AAA銀行,1
普通預金,BBB銀行,2
・・・

 

消費税のコードの対応表(zei.csv)

弥生,JDL課区,JDL税区,JDL税入力方法
課税売上内8%,売 上,8%,内税
課税売上内軽減8%,売 上,軽減8%,内税
課税売上内10%,売 上,10%,内税
非課売上,非売上,,
・・・

これら3つの対応表のcsvファイルが必要です。

補助科目名称と補助科目コードの対応表については、弥生会計で’補助科目一覧表.csv’をエクスポートして以下のプログラムを実行すれば作成できます。

import pandas as pd

df_hojo = pd.read_csv('補助科目一覧表.csv',encoding = 'cp932',header = 4)
df_hojo.drop(columns = df_hojo.columns[[0,3,4,5,6,7,8,9,10,11]], inplace=True)
df_hojo['JDL補助'] = df_hojo.groupby('所属勘定科目').cumcount()+1
df_hojo.to_csv('hojo.csv',encoding = 'cp932',index = False)

その他、’input.csv’を作成するためのタイトル行のみが入力されている’org.csv’が必要です。

,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
//識別フラグ,伝番,日付,借方科目,借方科目名称,借方科目正式名称,借方補助,借方補助名称,借方課区,借方税区,借方税入力方法,借方金額,借方消費税,貸方科目,貸方科目名称,貸方科目正式名称,貸方補助,貸方補助名称,貸方課区,貸方税区,貸方税入力方法,貸方金額,貸方消費税,摘要,借方取引科目,貸方取引科目,借方部門コード,借方部門名称,貸方部門コード

データ変換のプログラムは、次のようになりました。

import pandas as pd
import csv
import shutil

df_yayoi = pd.read_csv('export.csv',header = None,encoding = 'cp932')
df_yayoi.columns = ['A','B','C','D','E','F','G','H','I' \
              ,'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y']

df_kamoku = pd.read_csv('kamoku.csv',encoding = 'cp932')
df_hojo_pre = pd.read_csv('hojo.csv',encoding = 'cp932')
df_hojo = df_hojo_pre.astype({'JDL補助' : str})
df_zei = pd.read_csv('zei.csv',encoding = 'cp932')

#借方科目の処理
df_karikata = pd.merge(df_yayoi,df_kamoku,left_on = 'E' \
                       ,right_on ='弥生 科目名',how = 'left')
df_karikata = pd.merge(df_karikata,df_hojo,left_on = ['E','F'] \
                       ,right_on =['所属勘定科目','補助科目'],how = 'left')
df_karikata = pd.merge(df_karikata,df_zei,left_on ='H'\
                       ,right_on ='弥生',how = 'left')

#貸方科目の処理
df_kashikata = pd.merge(df_yayoi,df_kamoku,left_on = 'K' \
                        ,right_on ='弥生 科目名',how = 'left')
df_kashikata = pd.merge(df_kashikata,df_hojo,left_on = ['K','L'] \
                        ,right_on =['所属勘定科目','補助科目'],how = 'left')
df_kashikata = pd.merge(df_kashikata,df_zei,left_on ='N'\
                        ,right_on ='弥生',how = 'left')

#JDLデータ作成
df_jdl = pd.DataFrame(index=[i for i in range(len(df_yayoi))]\
                      ,columns=['A','B','C','D','E','F','G','H','I','J','K','L','M','N'\
                                ,'O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC'])


df_jdl['A'] = 1000
df_jdl['C'] = df_yayoi['D'].str.replace('/','')
df_jdl['D'] = df_karikata['JDL 科目コード']
df_jdl['G'] = df_karikata['JDL補助']
df_jdl['I'] = df_karikata['JDL課区']
df_jdl['J'] = df_karikata['JDL税区']
df_jdl['K'] = df_karikata['JDL税入力方法']
df_jdl['L'] = df_yayoi['I']
df_jdl['M'] = df_yayoi['J']

df_jdl['N'] = df_kashikata['JDL 科目コード']
df_jdl['Q'] = df_kashikata['JDL補助']
df_jdl['S'] = df_kashikata['JDL課区']
df_jdl['T'] = df_kashikata['JDL税区']
df_jdl['U'] = df_kashikata['JDL税入力方法']
df_jdl['V'] = df_yayoi['O']
df_jdl['W'] = df_yayoi['P']

df_jdl['X'] = df_yayoi['Q']
df_jdl['AA'] = 0
df_jdl['AC'] = 0

shutil.copyfile('org.csv','input.csv')

df_jdl.to_csv('input.csv',mode = 'a',encoding = 'cp932'\
              ,header = False,index = False)

DataFrameの列に他のDataFrameの列の要素を代入していますが、列名を指定していないとこのような書き方ができません。列名の代わりに列番号を使って書こうとすると、

df_jdl['D'] = df_karikata['JDL 科目コード']

という部分は

df_jdl.iloc[:,3] = df_karikata.iloc[:,27]

という書き方になります。

また、DataFrameへのcsvファイルの読み込みの際に

df_hojo = df_hojo_pre.astype({'JDL補助' : str})

という記述がありますが、これは最終的にJDLIBEX出納帳にCSVファイルのインポートをする際にこの項目だけエラーになってしまうので書き加えたものです。

タイトルとURLをコピーしました