Pythonで楽天カードの利用明細から弥生会計への入力用CSVファイルを作成する

Pythonを使って、楽天カードの利用明細から弥生会計への入力用のcsvファイルを作成します。

前提として、弥生会計の「スマート取引取込」は使っていません。

Pythonのコード

Pythonのコードは以下の通り。

import pandas as pd
import os
# 消費税の計算で四捨五入を行うため
from decimal import Decimal, ROUND_HALF_UP
def r_round(x):
    return int(Decimal(str(x)).quantize(Decimal('0'),rounding=ROUND_HALF_UP))

# 読み込むCSVファイルが存在するディレクトリに移動
os.chdir(r'C:\Users\XXXXX\Documents\YYYYY')

# csvファイルの読み込み
df = pd.read_csv('enavi202410(5632).csv',encoding='utf-8',header = 0,engine='python',usecols = [0,1,7], names=['利用日', '利用店名・商品名', '支払金額'])

# 利用日が空白になっている不要な行が存在する場合があるため、そのような行を削除する
df.dropna(subset=['利用日'],inplace = True)

# 列の追加
# 科目等をいったん仮払金のそれにしておく
df['科目'] = '仮払金'
df['補助'] = ''
df['税区分'] = '対象外'
df['税額'] = 0

# '利用店名・商品名'の記載内容から、科目、補助科目、税区分を判定する

# '利用店名・商品名'の記載内容に、特定の文字列が含まれているかどうかを判断する場合
df.loc[df['利用店名・商品名'].str.contains('AAAAA'), '科目'] = '諸会費'
df.loc[df['利用店名・商品名'].str.contains('AAAAA'), '補助'] = ''
df.loc[df['利用店名・商品名'].str.contains('AAAAA'), '税区分'] = '課対仕入内10%適格'

# '利用店名・商品名'の記載内容が、特定の文字列と一致するかどうかを判断する場合
df.loc[df['利用店名・商品名'] == 'BBB', '科目'] = '通信費'
df.loc[df['利用店名・商品名'] == 'BBB', '補助'] = ''
df.loc[df['利用店名・商品名'] == 'BBB', '税区分'] = '課対仕入内10%適格'

# '税区分'が'課対仕入内10%適格'であった場合、消費税額を計算する
df.loc[df['税区分'] == '課対仕入内10%適格', '税額'] = df['支払金額'] - (df['支払金額']/1.1).map(r_round)

# データ作成 弥生会計の入力用データと同じ列数のdataframeを作成して、内容をコピーする
# indexを指定しないと、['A']にデータが入らない

df_credit = pd.DataFrame(index = df.index,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_credit['A'] = 2000
df_credit['B'] = ''
df_credit['C'] = ''
df_credit['D'] = df['利用日']
df_credit['E'] = df['科目']
df_credit['F'] = df['補助']
df_credit['G'] = ''
df_credit['H'] = df['税区分']

df_credit['I'] = df['支払金額']
df_credit['J'] = df['税額']

# 自分が使用する科目名、補助科目名を指定する 
df_credit['K'] = '未払金'
df_credit['L'] = '楽天カード'
df_credit['M'] = ''
df_credit['N'] = '対象外'
df_credit['O'] = df['支払金額']
df_credit['P'] =  0

df_credit['Q'] = df['利用店名・商品名']

df_credit['R'] = ''
df_credit['S'] = ''
df_credit['T'] = 0
df_credit['U'] = ''
df_credit['V'] = ''
df_credit['W'] = 0
df_credit['X'] = 0
df_credit['Y'] = 'no'

#'支払金額'、'税額'に小数点が付いているので、int型に変換する
df_int = df_credit.astype({'I': int,'J': int,'O': int})

#csvファイルに書き込み
df_int.to_csv('py_rakutencard.csv',encoding = 'cp932',header = False,index = False)

CSVファイルの読み込み

CSVファイルの読み込みの際の注意点は、以下の3つ。

  • encodingは’utf-8’を指定する
  • 明細のデータの前後に不要な行が無く1行目がタイトル行なのでheader = 0 の指定でよい
  • usecols = [0,1,7], names=[‘利用日’, ‘利用店名・商品名’, ‘支払金額’]と指定して必要な列の列番号と列名を指定する

仮払金のデータについては取り込み後に手動で修正

‘利用店名・商品名’の記載内容による判定について、条件に一致しないデータについては入力用のデータは仮払金のままになります。

そのようなデータについては、弥生会計への取り込み後に手動で勘定科目等を修正することになります。

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