JPEA申請の回し方をどうする

投稿者: | 2023-03-08

目次

JPEA申請の回し方をどうする

import numpy as np
import pandas as pd
import pathlib

サンプル作成

# サンプルデータを作成
data = np.random.randint(1, 100, (10, 5))
header = 'No id 謄本 同意書 共同名義人'.split() 
df = pd.DataFrame(data, columns=header)
df['id'] = ['A' + str(i) for i in np.random.randint(100, 999, 10)]
df['No'] = [i for i in range(1, 11)]
df.iat[2,2], df.iat[4,4], df.iat[3,4] = np.nan, np.nan, np.nan
df
Noid謄本同意書共同名義人
01A87931.03211.0
12A79977.02371.0
23A741NaN36.0
34A95095.058NaN
45A48993.01NaN
56A64253.08523.0
67A92013.0914.0
78A22252.08951.0
89A64097.08252.0
910A60462.08365.0

NaNをNoneへ置換

# NaNは辞書にすると文字列になるため、本来のNoneに変換しておく
df = df.replace([np.nan], [None])
df

[pandas]DataFrameのNaNをサクッとNoneに置き換える方法2つ | pixelbeat sandbox

Noid謄本同意書共同名義人
01A87931.03211.0
12A79977.02371.0
23A741None36.0
34A95095.058None
45A48993.01None
56A64253.08523.0
67A92013.0914.0
78A22252.08951.0
89A64097.08252.0
910A60462.08365.0
a_id = df.iat[0, 1]
df_0 = df.query('id == @a_id')
df_0
Noid謄本同意書共同名義人
01A87931.03211.0

値へ直接アクセスするには

print(df_0.iat[0,0])
print(df_0.iat[0,1])
print(df_0.iat[0,2])
print(df_0.iat[0,3])
1
A879
31.0
32
print(df.at[0,'id'])
print(df.at[0,'謄本'])
print(df.at[0,'同意書'])
print(df.at[0,'共同名義人'])
A879
31.0
32
11.0

辞書を作りたい

df0 = df.set_index('No')
df0
id謄本同意書共同名義人
No
1A87931.03211.0
2A79977.02371.0
3A741None36.0
4A95095.058None
5A48993.01None
6A64253.08523.0
7A92013.0914.0
8A22252.08951.0
9A64097.08252.0
10A60462.08365.0

修正)転置せずとも、df.to_dict(orient=’index’) で出せる

# 転置しないとキー:{ }の形にならない
df1 = df0.T
df1
No12345678910
idA879A799A741A950A489A642A920A222A640A604
謄本31.077.0None95.093.053.013.052.097.062.0
同意書322335818591898283
共同名義人11.071.06.0NoneNone23.04.051.052.065.0

これが欲しかった!(辞書)

# これがほしかった! この正しいデータさえあれば自動投入が可能
# キーを何にするか。ここではNoにしている。
df_dict = df1.to_dict()
df_dict
{1: {'id': 'A879', '謄本': 31.0, '同意書': 32, '共同名義人': 11.0},
 2: {'id': 'A799', '謄本': 77.0, '同意書': 23, '共同名義人': 71.0},
 3: {'id': 'A741', '謄本': None, '同意書': 3, '共同名義人': 6.0},
 4: {'id': 'A950', '謄本': 95.0, '同意書': 58, '共同名義人': None},
 5: {'id': 'A489', '謄本': 93.0, '同意書': 1, '共同名義人': None},
 6: {'id': 'A642', '謄本': 53.0, '同意書': 85, '共同名義人': 23.0},
 7: {'id': 'A920', '謄本': 13.0, '同意書': 91, '共同名義人': 4.0},
 8: {'id': 'A222', '謄本': 52.0, '同意書': 89, '共同名義人': 51.0},
 9: {'id': 'A640', '謄本': 97.0, '同意書': 82, '共同名義人': 52.0},
 10: {'id': 'A604', '謄本': 62.0, '同意書': 83, '共同名義人': 65.0}}
# もしidをキーにするならこうする。
df_2 = df.set_index('id')
display(df_2.T)
df_2.T.to_dict()
idA879A799A741A950A489A642A920A222A640A604
No12345678910
謄本31.077.0None95.093.053.013.052.097.062.0
同意書322335818591898283
共同名義人11.071.06.0NoneNone23.04.051.052.065.0
{'A879': {'No': 1, '謄本': 31.0, '同意書': 32, '共同名義人': 11.0},
 'A799': {'No': 2, '謄本': 77.0, '同意書': 23, '共同名義人': 71.0},
 'A741': {'No': 3, '謄本': None, '同意書': 3, '共同名義人': 6.0},
 'A950': {'No': 4, '謄本': 95.0, '同意書': 58, '共同名義人': None},
 'A489': {'No': 5, '謄本': 93.0, '同意書': 1, '共同名義人': None},
 'A642': {'No': 6, '謄本': 53.0, '同意書': 85, '共同名義人': 23.0},
 'A920': {'No': 7, '謄本': 13.0, '同意書': 91, '共同名義人': 4.0},
 'A222': {'No': 8, '謄本': 52.0, '同意書': 89, '共同名義人': 51.0},
 'A640': {'No': 9, '謄本': 97.0, '同意書': 82, '共同名義人': 52.0},
 'A604': {'No': 10, '謄本': 62.0, '同意書': 83, '共同名義人': 65.0}}
# No1の「~」の数(=URL)は?
print(f"{df_dict[1]['謄本']=}")
print(f"{df_dict[1]['同意書']=}")
print(f"{df_dict[1]['共同名義人']=}")
df_dict[1]['謄本']=31.0
df_dict[1]['同意書']=32
df_dict[1]['共同名義人']=11.0

辞書ならセットで追加できる

# dicに新しい情報を追加することもできる
df_dict[3]['STATUS'] = "まだ"
df_dict[2]['STATUS'] = "中断"
df_dict[1]['STATUS'] = "完了"
df_dictp
{1: {'id': 'A879', '謄本': 31.0, '同意書': 32, '共同名義人': 11.0, 'STATUS': '完了'},
 2: {'id': 'A799', '謄本': 77.0, '同意書': 23, '共同名義人': 71.0, 'STATUS': '中断'},
 3: {'id': 'A741', '謄本': None, '同意書': 3, '共同名義人': 6.0, 'STATUS': 'まだ'},
 4: {'id': 'A950', '謄本': 95.0, '同意書': 58, '共同名義人': None},
 5: {'id': 'A489', '謄本': 93.0, '同意書': 1, '共同名義人': None},
 6: {'id': 'A642', '謄本': 53.0, '同意書': 85, '共同名義人': 23.0},
 7: {'id': 'A920', '謄本': 13.0, '同意書': 91, '共同名義人': 4.0},
 8: {'id': 'A222', '謄本': 52.0, '同意書': 89, '共同名義人': 51.0},
 9: {'id': 'A640', '謄本': 97.0, '同意書': 82, '共同名義人': 52.0},
 10: {'id': 'A604', '謄本': 62.0, '同意書': 83, '共同名義人': 65.0}}
# 外側のループはこれ。※ 最初に NaN を None に変換しているので Noneの場合はスキップされる
for No, files in df_dict.items():
    # この2つで入力実施
    No = No
    setsubi_id = files['id']

    # Selenium 実行関数(入力)
    # try:
    #     func()
    # except Exception as ex:
    #     print(f'処理中断:{id=}', ex)
    #     sys.exit()

    # Selenium 実行関数(添付)

    # 以下で添付ファイルを乗り切る
    path_tohon = files['謄本']
    path_doisyo = files['同意書']
    path_kyodo = files['共同名義人']
    print(f'{No=}, {setsubi_id=}, {path_tohon=}, {path_doisyo=}, {path_kyodo=}')

    if path_tohon:
        print("添付を実行(謄本)", path_tohon)
    if path_doisyo:
        print("添付を実行(同意書)", path_doisyo)
    if path_kyodo:
        print("添付を実行(共同名義人)", path_kyodo)

    # Selenium 実行関数(申請)
    # 申請番号を記録、ループに戻る
No=1, setsubi_id='A879', path_tohon=31.0, path_doisyo=32, path_kyodo=11.0
添付を実行(謄本) 31.0
添付を実行(同意書) 32
添付を実行(共同名義人) 11.0
No=2, setsubi_id='A799', path_tohon=77.0, path_doisyo=23, path_kyodo=71.0
添付を実行(謄本) 77.0
添付を実行(同意書) 23
添付を実行(共同名義人) 71.0
No=3, setsubi_id='A741', path_tohon=None, path_doisyo=3, path_kyodo=6.0
添付を実行(同意書) 3
添付を実行(共同名義人) 6.0
No=4, setsubi_id='A950', path_tohon=95.0, path_doisyo=58, path_kyodo=None
添付を実行(謄本) 95.0
添付を実行(同意書) 58
No=5, setsubi_id='A489', path_tohon=93.0, path_doisyo=1, path_kyodo=None
添付を実行(謄本) 93.0
添付を実行(同意書) 1
No=6, setsubi_id='A642', path_tohon=53.0, path_doisyo=85, path_kyodo=23.0
添付を実行(謄本) 53.0
添付を実行(同意書) 85
添付を実行(共同名義人) 23.0
No=7, setsubi_id='A920', path_tohon=13.0, path_doisyo=91, path_kyodo=4.0
添付を実行(謄本) 13.0
添付を実行(同意書) 91
添付を実行(共同名義人) 4.0
No=8, setsubi_id='A222', path_tohon=52.0, path_doisyo=89, path_kyodo=51.0
添付を実行(謄本) 52.0
添付を実行(同意書) 89
添付を実行(共同名義人) 51.0
No=9, setsubi_id='A640', path_tohon=97.0, path_doisyo=82, path_kyodo=52.0
添付を実行(謄本) 97.0
添付を実行(同意書) 82
添付を実行(共同名義人) 52.0
No=10, setsubi_id='A604', path_tohon=62.0, path_doisyo=83, path_kyodo=65.0
添付を実行(謄本) 62.0
添付を実行(同意書) 83
添付を実行(共同名義人) 65.0
# もし関数がよいなら
def attach_files(No_or_setsubi_id):
    files = df_dict[No_or_setsubi_id]
    setsubi_id = files['id']
    # 以下で添付ファイルを乗り切る
    path_tohon = files['謄本']
    path_doisyo = files['同意書']
    path_kyodo = files['共同名義人']
    return path_tohon, path_doisyo, path_kyodo
attach_files(No_or_setsubi_id=1)
(31.0, 32, 11.0)
df_rev = pd.DataFrame(df_dict).T
df_rev
id謄本同意書共同名義人STATUS
1A87931.03211.0完了
2A79977.02371.0中断
3A741None36.0まだ
4A95095.058NoneNaN
5A48993.01NoneNaN
6A64253.08523.0NaN
7A92013.0914.0NaN
8A22252.08951.0NaN
9A64097.08252.0NaN
10A60462.08365.0NaN
df_rev.to_excel('df_rev.xlsx')