报账处理——细表直接生成加密表

酶和ATP 2023年03月15日 616次浏览
import pandas as pd
import datetime  # 用于获取时间

# 手动输入文件地址
file_path = input("请输入文件地址:")

# 读取 Excel 文件,去除路径两边的''
df = pd.read_excel(file_path.strip("'"), skiprows= 1, dtype={'学号': str, '卡号': str})

# 输出表
print(df)

# 输出金额的总和
print('分类前行数', len(df))
print('分类前金额总和', df['金额'].sum()/2)
print()

# 去除卡号两边的换行符、空格和中间的空格
df['卡号'] = df['卡号'].fillna('').astype(str).str.strip().str.replace(' ', '')

# 修正学号第一位丢失问题
df['学号'] = df['学号'].astype(str).apply(lambda x: x.zfill(7))

# 筛选出金额数量不为1的记录
filtered = df.groupby(['学号', '姓名'], as_index=False).filter(lambda x: len(x) != 1).sort_values(['学号', '姓名'])

# 输出学号和姓名
print('做了多份工作的同学:')
print(filtered[['学号', '姓名', '金额']])
print()

# 对学号、姓名、银行卡号和年级进行分组,并对金额进行求和
df = df.groupby(['学号', '姓名', '卡号'], as_index=False)['金额'].sum()

# 输出分类后的行数和金额总数
print('分类后行数', len(df))
print('总金额', df['金额'].sum())

# 在 DataFrame 中插入空列
for i in range(5):
    df.insert(2, f'{i+1}', '')

# 重新排列列的顺序
df = df.reindex(columns=['姓名', '卡号', 1, 2, 3, 4, 5, '金额', '学号'])

# 保存文件的地址是输入文件的地址+时间+后缀

output_file = file_path.strip("'").replace(".xlsx", '_' + datetime.datetime.now().strftime('%m月%d日%H%M') + '_加密表.xlsx')

# 将结果保存到 Excel 文件中
with pd.ExcelWriter(output_file) as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    # writer.close()

print('输出结果已保存到文件中!')

How to use?

保存上方代码为xxx.py
安装 pandas 库 pip install pandas
运行之,复制地址进去,回车即可

感谢 Chatgpt 对这段代码的有力支持!