将一个列表中的元素检查并存入另一个列表

问题遇到的现象和发生背景

想做一个自动算价格的代码: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)

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

img

img

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)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

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)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632