kinkiGeneral / app.py
taskforce-dev's picture
Update app.py
edcc0a9 verified
raw
history blame
4.73 kB
import pandas as pd
import gradio as gr
def process_csv(input_file):
# Load the CSV file with MS932 encoding
df = pd.read_csv(input_file.name, dtype={"請求先コード": str}, encoding="MS932", header=0)
#伝票連番が空白の行を削除する
df = df.dropna(subset=["伝票連番"])
#現金入金額に全ての入金額を寄せる
#請求先コードが空白でない行をフィルタリング
non_empty_rows = df['請求先コード'].notna()
#現金入金、手形入金、値引入金の合計を計算
df.loc[non_empty_rows, 'その他入金'] = df.loc[non_empty_rows, ['現金入金', '手形入金', '値引入金', 'その他入金']].sum(axis=1)
# Drop specified columns
columns_to_drop = [
'郵便番号',
'住所1',
'住所2',
'敬称区分',
'請求開始残高',
'回収予定日',
'回収区分',
'現金入金',
'手形入金',
'値引入金',
'繰越金額',
'掛売上額',
'掛返品額',
'掛売値引',
'掛売消費税',
'今回請求金額',
'最終請求書発行日',
'請求番号',
'担当者コード',
'担当者名',
'部署名',
'伝票枚数',
'得意先名カナ',
'伝票連番',
'行番号',
'伝票区分',
'商品コード',
'図面番号',
'サイズ',
'金額',
'消費税',
'消費税区分',
'消費税率',
'手形番号',
'振出日',
'手形期日',
'納品先名',
'税区分',
'税端数区分'
]
df.drop(columns_to_drop, axis=1, inplace=True, errors='ignore')
# Rename specified columns
column_name_mapping = {
'請求先コード': '得意先コード',
'前回請求金額': '前回請求残高',
'その他入金': '今回入金額',
'伝票日付': '明細ユーザ定義項目1',
'伝票番号': '明細ユーザ定義項目2',
'商品名': '品名',
'行摘要': '明細ユーザ定義項目3',
'商品名': '品名'
}
df.rename(columns=column_name_mapping, inplace=True)
# Convert the '請求日' column from YYYYMMDD to YYYY/MM/DD format
df.loc[df['請求日'].notna() & (df['請求日'] != ''), '請求日'] = df['請求日'].astype(str).apply(lambda x: x[:4] + '/' + x[4:6] + '/' + x[6:8])
# Identify rows where '得意先コード' has a value (i.e., is not NaN)
rows_with_values = df['得意先コード'].notna()
# Iterate over the rows in reverse to avoid shifting index issues
for idx in range(len(df) - 1, -1, -1):
if rows_with_values.iloc[idx]:
# Insert a new row above the current row
df = pd.concat([
df.iloc[:idx],
pd.DataFrame([df.iloc[idx]], columns=df.columns),
df.iloc[idx:]
]).reset_index(drop=True)
# Move the specified columns from the lower row to the inserted row
columns_to_move = ['得意先コード', '得意先名', '請求日', '前回請求残高', '今回入金額']
df.loc[idx, columns_to_move] = df.loc[idx + 1, columns_to_move]
df.loc[idx + 1, columns_to_move] = [float('nan')] * len(columns_to_move)
# Identify rows where '得意先コード' has a value and where the subsequent row does not
is_inserted_row = df['得意先コード'].notna() & df['得意先コード'].shift(-1).isna()
# Remove specified columns from the identified rows
columns_to_remove = ['明細ユーザ定義項目1', '明細ユーザ定義項目2', '品名', '単位', '数量', '単価', '明細ユーザ定義項目3']
df.loc[is_inserted_row, columns_to_remove] = float('nan')
# Add a new column named "行形式"
df.insert(0, "行形式", "")
# Set the value "ヘッダ" for rows where "請求先コード" is not empty
df.loc[df["得意先コード"].notna(), "行形式"] = "ヘッダ"
# Set the value "明細" for rows where "請求先コード" is empty
df.loc[df["得意先コード"].isna(), "行形式"] = "明細"
# '得意先コード'列を整数型に変換
df.loc[df['得意先コード'].notna() & (df['得意先コード'] != ''), '得意先コード'] = df.loc[df['得意先コード'].notna() & (df['得意先コード'] != ''), '得意先コード'].astype(int)
# Save the modified dataframe to the output file
output_file_path = 'processed_file.csv'
df.to_csv(output_file_path, index=False, encoding="MS932")
return output_file_path
# Webアプリを作成
app = gr.Interface(fn=process_csv, inputs="file", outputs="file")
# Webアプリを起動
app.launch(share=True)