【发布时间】:2021-06-22 16:15:17
【问题描述】:
午后花团锦簇,
当我尝试为某些用户准备数据时,我遇到了一些提取 / 的挑战。 正如我被告知的那样,在 SQL 中很难做到这一点,因为没有明确的模式,我在 python 中尝试了一些东西,但没有成功(因为我还在学习 python)。
问题陈述:
我的 SQL 查询输出是 excel 或文本文件(取决于我如何发布它,但可以两种方式进行)。我有一个字段(excel 或文本文件中的第四列),其中包含一个或多个拒绝原因(参见下面的示例),用逗号分隔。同时,在错误中(有时)使用逗号。
未经任何修改的字段示例
INVOICE_CREATION_FAILED[无效地址信息:公司名称,有限公司:Blueberry Street 10+City++09301+SK|SK000001111|BLD 在第 1 行,发票上的公司 ID 与为系统中的代码注册的公司 ID 不匹配:[AL12345678901]|ABC1D|DL0000001 在第 2 行,采购订单不正确:VTB2R|ADLAVA9 在第 1 行]
期望的输出:
地址信息无效;发票上的公司 ID 与系统中注册代码的公司 ID 不匹配;采购订单不正确
Python 代码:
import pandas
excel_data_df = pandas.read_excel('rejections.xlsx')
# print whole sheet data
print(excel_data_df['Invoice_Issues'].tolist())
excel_data_df['Invoice_Issues'].split(":", 1)
输出:
INVOICE_CREATION_FAILED[Invalid Address information:
我试过拆分字符串,但它不能正常工作。它会删除冒号之后的所有内容,这是可以接受的,因为它是这样编码的,但是,我需要修剪不必要的数据字符串并只保留每行所需的输出。 我将非常感谢有关如何修剪输出的任何代码建议,我将只从该字符串中提取所需的内容 - 如果子字符串可用。
在 excel 中,我通常会使用错误列表,以及带有 FIND 和 MATCH 的嵌套 IF 函数。但我不确定如何在 Python 中做到这一点......
非常感谢,
格雷格
【问题讨论】:
-
嗨,格雷格,是否存在有限的错误列表?您可以列出这些字符串的值,然后为每一行构造一个列表。目前您受到限制,因为您将输出限制为一个 string.split(),即使用 .split(":", 1) 中的第二个参数。
-
嗨史密斯,这是一个非常特殊的情况,但通常我有一个错误列表,完整列表包含 39 个唯一错误。 E01 =“无效地址信息”,E02 =“错误采购订单”,E03 =“无效增值税号”....... E39 =“没有可用的税行。每张发票可以有一个/所有/很少。我想避免拆分选项,并尝试更多的 IF 错误 E01 在字符串中,只复制“无效地址信息”。
-
是的,创建一个包含错误的字典以及您希望它们映射到的内容,然后遍历该行并使用字典查看该键是否存在。
-
能否请您指出我该如何做错误字典?对于“查看该密钥是否存在”部分,您能详细说明一下吗?我对 python 很陌生。
-
好的,我会写一个答案。
标签: python regex substring python-re strsplit