有了这个Python程序后,干完饭不用再花时间算账了

大家好,我是翔宇!
今天带大家实现一个算账自动化,由于疫情,公司员工吃饭等着食堂送到工位,然后由我来帮大家订餐,每个周五由我来算账,再收大家的饭钱。

连续几周后,由于每次我算账用excel来算,所以,每次都要将信息统计在excel里面进行整理再计算,每次都可能花费10分钟以上,而且对于我们”搞数据“的人来说,一句话就是,绝不做简单而重复的事情。

于是我用python写了这么一个自动算账的小程序。

首先,我们是用钉钉进行接龙点餐,于是,当我把数据导出来之后,它是这样的。

image-20220227214711421

于是,之前我都是采用“人工智能”(我自己)来做这项工作的。然后将它整理成下面这样。image-20220227215158840

而“人工智能”罢工后,我不得不用Python写了今天这样一个“小程序”来进行自动化计算。

再进行自动化计算后,得到的效果是这样的。(1代表7元的快餐,2代表8元的饺子)

image-20220227221055730

1.导入数据

原始数据是这样的,因此,我将一个周的都导出来以后,也就得到了上面第一张图那个数据。

image-20220227220218210

原始表格我已经上传到后台,需要数据去练练手的小伙伴,请在本公众号后台回复“算账”后自取。

2.采用pandas处理数据

得到数据后,接下最核心的步骤就是想办法将它处理成下面这个样子。

image-20220227221631049

这也是我平时采用“人工智能”去解决去问题,只要到这里了,那剩下的不管你是用excel进行计算还是用手机打开计算器来算了填上去,这都不在是事情了吧!

2.1类似excel中的分列处理

# pandas处理数据
import pandas as pd
import numpy as np

df1 = pd.read_excel('data/订餐算账自动化.xlsx',sheet_name='明细')

df1.head(10)

# 去掉第一行记录
df1.drop(index=0,inplace=True)
# 类似excel中的分列处理
merged_DataFrame = pd.DataFrame()
for i in '一二三四五':
    temp_str =f'第{i}天'
#     temp_str_end = "'{}'".format(temp_str)   # 加引号
#     print(temp_str_end)
    temp_DataFrame =  df1[temp_str].str.extract(r'.+?,(.+?),(.+)')   # 全空列不能.str
    temp_DataFrame.rename(columns={0:f'周{i}姓名',1:f'周{i}'},inplace=True)
    for column in temp_DataFrame.columns: 
        merged_DataFrame[column] = temp_DataFrame[column]
merged_DataFrame

经过几下操作后

image-20220227223005017

2.2采用正则表达式处理

# 采用正则表达式处理
# 将含有饺子的记录变为2,其它的都为1
for i in '一二三四五':
    merged_DataFrame[f'周{i}'].replace(regex={r'.?[饺].':2,r'.+':1},inplace=True)
    
merged_DataFrame

image-20220227223233774

2.3每次取两列与“主表”进行左外连接

# 创建一个新表,只有所有人的名字
result_DataFrame = pd.DataFrame({'姓名':merged_DataFrame.周一姓名.values},index=merged_DataFrame.index)
result_DataFrame

image-20220227223441778

# 每次取两列与新建的表进行左外连接
for i in range(0,10,2):
    temp = merged_DataFrame.iloc[:,i:i+2]
    temp.rename(columns={temp.columns[0]:'姓名'},inplace=True)
#     temp
#     #     result_DataFrame = result_DataFrame.join(temp.columns[0], on='姓名')  #不对的
    result_DataFrame = pd.merge(result_DataFrame,temp,how='left',left_on='姓名',right_on='姓名')
    
#     result_DataFrame = pd.concat([result_DataFrame,temp],axis=1,join='inner') #不对的

result_DataFrame

image-20220227223649233

大致雏形已经出来了,下面,只需要处理空值了

3.算账

3.1将NAN值全部处理成0

# 读取数据
df = result_DataFrame

df.head()

df.info()

# 将NAN值全部处理成0
df.fillna(0,inplace=True)

3.2建立映射,计算“总计”列

将1对应7元,2对应8元,建立字典

# 建字典
def get_value(key):
    calc_dict = {0:0,1:7,2:8}
    return calc_dict[key]
# 计算“总计”列
total = np.zeros(len(df))
for i in "一二三四五":
    total += df[f'周{i}'].apply(get_value)
df['总计'] = total
df

image-20220227234542874

4.保存结果

df.to_excel('data/干饭算账自动化结果.xlsx')

接下,在data路径下打开excel文件,我们就得到总账了

image-20220227234730825

好了,今天的内容就是这么多,完整代码翔宇已经整理好放后台了,需要的小伙伴请到同名公众号在后台回复“干饭算账自动化”,获取吧!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>