Pythonのpandasで日付によるデータの抽出を行う

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の要素...
タイトルとURLをコピーしました