lanmor_699 2022-06-21 19:58 采纳率: 78.9%
浏览 101
已结题

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

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

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

  • 写回答

3条回答 默认 最新

  • 关注
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 赞助了问题酬金30元 6月22日
  • 赞助了问题酬金20元 6月21日
  • 展开全部

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试