想做一个自动算价格的代码: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中的'八角'
#如果不存在,则不替换
##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)
import pandas as pd
import re
data = pd.read_excel(r'价格别名表.xlsx',sheet_name=0)#读取表格原始数据
print(data)
#提取表格中每一列的数据
name1 = data['名称']
#价格的单位为克
price1 = data['价格1']
price2 = data['价格2']
price3 = data['价格3']
alias = data['别名']
#print(alias)
# 1.需要处理的文本(包含名称、数量和单位),后期改成input输入
detail = '木香750克,排草500克,桂枝400克,母丁香750克,红扣500克 枳壳500克,青果500克,烟桂500克,山楂400克、毛桃400克,干八角500克。'
# 2.将文本进行分离,并将名字,数量和单位分别存入列表
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)
prince = []
amount = []
for i in range(len(name)):
price = None
amo = None
for j in range(len(name1)):
sl = alias[j].strip().split('、')
if any(map(lambda x:x in name[i] ,sl)):
name[i] = sl[0]
if num[i] >= 250 :
price = price1[j]
elif 100 < num[i] <250:
price = price2[j]
else:
price = price3[j]
amo = num[i]/500*price
break
else:
print('没找到',name[i])
prince.append(price)
amount.append(amo)
# 3.创建字典
data = {
"序号": index,
"名称": name,
"重量": num,
"单位": unit,
"价格": prince,
'金额': amount
}
# 4.创建DataFrame表格
df = pd.DataFrame(data)
print(df)
# 5.写入excel
df.to_excel(r'C:\Users\Administrator\Desktop\结果.xlsx',index=None)
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
name的修改我是按name1修改的,不是改为别名第一个,虽然你表格是强制第一个别名就是名字,但是我觉得直接按name1改更合理一些
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)
prices = []
amounts = []
for i in range(len(name)):
price = None
amount = None
for j in range(len(alias)):
if name[i] in alias[j]:
name[i] = name1[j]
if num[i] >= 250 :
price = price1[j]
elif 100 < num[i] <250:
price = price2[j]
else:
price = price3[j]
amount = num[i]/500*price
break
else:
print(f'{name[i]}不存在于别名中')
prices.append(price)
amounts.append(amount)
data = {"序号": index,"名称": name,"重量": num,"单位": unit,"价格": prices,'金额': amounts}
##5.创建DataFrame表格
df = pd.DataFrame(data)
##5.写入excel
df.to_excel(r'C:\Users\Administrator\Desktop\结果.xlsx',index=None)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!