问题遇到的现象和发生背景
想做一个自动算价格的代码:1.因为有别名,需要先将输入的文本提取当中的名称,并替换成原始数据中‘别名’列中的第一个
2.替换完的名称,再从原始数据中查找对应的价格(价格按num的大小分为3档 )
3.将替换完的名称、对应的价格、计算出来的金额、还有数量、单位数据存入DataFrame,并导出到excel
问题相关代码,请勿粘贴截图
import pandas as pd
import re
data = pd.read_excel(r'价格别名表.xlsx',sheet_name=0)#读取表格原始数据
##1.提取表格中每一列的数据
name1 = data['名称']
#价格的单位为克
price1 = data['价格1']
price2 = data['价格2']
price3 = data['价格3']
alias = data['别名']
##2.需要处理的文本(包含名称、数量和单位),后期改成input输入
detail = '木香750克,排草500克,桂枝400克,母丁香750克,红扣500克 枳壳500克,青果500克,烟桂500克,山楂400克、毛桃400克,干八角500克。'
##3.将文本进行分离,并将名字,数量和单位分别存入列表
test = re.findall('([\u4e00-\u9fa5A-Za-z]+)(\d+)([\u4e00-\u9fa5A-Za-z]+)', detail)
name = [x[0] for x in test]
num = [int(x[1]) for x in test]
unit = [x[2] for x in test]
index = range(1,len(test) + 1)
#需求:1、检测从detail中提取的name列表中每个元素是否存在于"别名-alias"的某个元素中,如:name[10]--干八角,在alias表格的第二行'八角、大茴香、大回、大料、大茴'中
# 如果存在:
# 将alias的第一个顿号前的'八角'替换name[10]:即将name中的'干八角',替换为alias中的'八角'
#如果不存在,则不替换
2、利用替换完的name 查找表格中对应name1的price:(数量不同,分配不同的价格)
if num >= 250 :
则查找name1对应的price1,并存入新的列表price
并且计算出金额,存入新的列表:amount=num/500*price
(如果在name1中找不到相应的name则输出name,price和amount均为空值)
if 100 < num <250:
则查找name1对应的price2,并存入新的列表price
并且计算出金额,存入新的列表:amount=num/500*price
(如果在name1中找不到相应的name则输出name,price和amount均为空值)
else:
则查找name1对应的price3,并存入新的列表price
并且计算出金额,存入新的列表:amount=num/500*price
(如果在name1中找不到相应的name则输出name,price和amount均为空值)
3、将所有的amount[i],存入列表amount
##4.创建字典
data = {
"序号": index,
"名称": name,
"重量": num,
"单位": unit,
"价格": price,
'金额': amount
}
##5.创建DataFrame表格
df = pd.DataFrame(data)
##5.写入excel
df.to_excel(r'C:\Users\Administrator\Desktop\结果.xlsx',index=None)