Pythonのpandasで日付によるデータの抽出と値の代入を行いました。
課題としては、弥生会計の仕訳帳のデータで2023年10月1日以降のものの課税の区分を
「課対仕入内軽減8%区分100%」 → 「課対仕入内軽減8%区分80%」
「課対仕入内10%区分100%」 → 「課対仕入内10%区分80%」
にそれぞれ修正する、というものとします。
import pandas as pd import csv import datetime df = pd.read_csv('変換前.csv',header = None,encoding = 'cp932',dtype = 'object') df.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['Z'] = pd.to_datetime(df['D'], format='%Y/%m/%d') # loc, ilocのブーリアンインデックスによる値の代入 df.loc[(df['Z'] >= datetime.datetime(2023,10,1))&(df['H']=='課対仕入内軽減8%区分100%'), 'H'] = '課対仕入内軽減8%区分80%' df.loc[(df['Z'] >= datetime.datetime(2023,10,1))&(df['H']=='課対仕入内10%区分100%'), 'H'] = '課対仕入内10%区分80%' # こちらでもよい # df.loc[(df['Z'] > datetime.datetime(2023,9,30))&(df['H'].isin(['課対仕入内軽減8%区分100%'])), 'H'] = '課対仕入内軽減8%適格' # df.loc[(df['Z'] > datetime.datetime(2023,9,30))&(df['H'].isin(['課対仕入内10%区分100%'])), 'H'] = '課対仕入内10%適格' df.drop('Z', axis=1,inplace=True) df.to_csv('変換後.csv',mode='w',header=False,index=False,encoding ='cp932')
日付を取り扱うのでdatetimeをimportします。
弥生会計の仕訳帳をCSVファイルに出力したものを読み込んで、D列の日付のデータを使ってpandas用の日付データの列を新たにZ列として作成します。
Z列の日付のデータとH列の課税の区分でデータを抽出して、H列の値を書き換えます。
Z列は不要になるので削除して、CSVファイルに出力します。
pandasでのこのような「条件によるデータの抽出と値の代入」をよく行っていたのですが、「loc, ilocのブーリアンインデックスによる値の代入」というものだそうです。
pandasで条件に応じて値を置換(where, mask) | note.nkmk.me
pandasで条件に応じて値を置換する方法を説明する。if文を使うわけではないが、DataFrameやSeriesに対してif then ...やif then ... else ...のような条件分岐の処理が可能。 条件がFalseの要素...