前提・実現したいこと
複数の.xlsx ファイルを読み込み、100件程のファイルを結合したいと思っています。
1)1つの.xlsx内に5~6個のグループ(テーブル?)があり、その間に空白行を入れないといけません。
2)指定した列(['伝票日付'])に空白がある場合は、その行を削除します。
発生している問題
1)空白行を残すため"-"(※適当に指定した値)を入れて最後に"-"を.xlsxファイルを出力時に削除しようと試みてますが実行結果に反映されません。
2)空白がある行はGoogleColab上の実行結果では削除されていますが、.xlsxファイルを出力、ダウンロード時には反映されていません。
該当のソースコード
python3
1import openpyxl 2import pandas as pd 3from glob import glob 4 5filepaths = glob('/content/sample_data/*.xlsx') 6filepath = filepaths[1] 7 8def extract(filepath): 9 _df = pd.read_excel(filepath,sheet_name='Sheet2', header=None) 10 columns = _df.iloc[0,[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52]] 11 df = _df.iloc[1:38, [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52]] 12 df.columns = columns 13 df.dropna(subset=['伝票日付'], how='any') 14 return df 15 16df = pd.DataFrame() 17 18for filepath in filepaths: 19 _df = extract(filepath) 20 df = pd.concat([df, _df]) 21 22df.dropna(subset=['伝票日付'], how='any') 23df.replace( '-', 'NaN') 24 25df.to_excel('/content/sample_data/yen_master_***.xlsx', index=False )
ex.
1 2 3 4 5
1 index1 0 10 0 0
2 index2 0 30 0 0
3 index3 0 NaN 0 0 ← 指定列"3"にNaNがあるので行を削除
4 NaN NaN - NaN NaN ←"-"の値は削除して行は残す
5 index1 0 10 0 0
6 index2 0 30 0 0
7 index3 0 NaN 0 0 ← 指定列"3"にNaNがあるので行を削除
8 index3 0 NaN 0 0 ← 指定列"3"にNaNがあるので行を削除
9 NaN NaN - NaN NaN ←"-"の値は削除して行は残す
10 index1 0 10 0 0
11 index2 0 30 0 0
12 NaN NaN - NaN NaN ←"-"の値は削除して行は残す
※こちらで1ファイル内のデータとなります。最大100程度を下方向にマージしたいと考えています。
特に
df.dropna(subset=['伝票日付'], how='any')
df.replace( '-', 'NaN')
の代入の仕方が分かりません…
上記コード内容にこだわっていませんが何か良い方法がありましたらご教示いただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/19 02:59
2021/04/28 07:19
2021/04/29 15:58 編集