【问题标题】:Python Help - Perform "isnumber(search" in PythonPython 帮助 - 在 Python 中执行“isnumber(search”)
【发布时间】:2022-01-01 18:47:00
【问题描述】:

我一直在寻找这个答案的高低,我在任何地方都找不到合适的解决方案。

我想对列中的一组关键字进行查看和分类,我通常使用“isnumber(search”) 执行此操作,但我限制为 64 个变体。我使用的代码示例如下:

=IF(ISNUMBER(SEARCH("bag",A2)),"Bags",
IF(ISNUMBER(SEARCH("rucksack",A2)),"Bags",
IF(ISNUMBER(SEARCH("handbag",A2)),"Bags",
IF(ISNUMBER(SEARCH("purse",A2)),"Personal Bags",
IF(ISNUMBER(SEARCH("wallet",A2)),"Personal Bags")))))

预期的输出如下:

Keyword Category
handbag Bags
rucksack Bags
drawstring bags Bags
tote bag Bags
cotton tote FALSE
purse Personal Bags
wallet Personal Bags

可以在 Python 中复制相同的功能吗?

我希望布局为 A 列

我见过这种变体,但它使用“真”或“假”语句,并在“关键字”列的右侧添加了无穷无尽的列,但清理起来很费力。

如果有人知道如何在 Python 中复制 Excel 公式,将不胜感激 :)

干杯

【问题讨论】:

  • 您应该提供数据示例和预期输出
  • 不用担心,添加输出数据:)

标签: python excel-formula


【解决方案1】:

您想搜索项目集以查看任何特定项目属于哪个集?

def categoriseItems(currVar):
    bags = set(["handbag", "rucksack", "drawstring bags", "tote bag"])
    personalBags = set(["purse", "wallet"])

    itemCat = None
    if currVar in bags:
        itemCat = "bags"
    elif currVar in personalBags:
        itemCat = "personal bags"

    if not itemCat:
        print("Item " + currVar + " not categorised")

    return [currVar, itemCat]

编辑:

那么,如果你想要你的输出格式,是 openpyxl 吗?

如果是这样,将数据组合成一个列表,如下所示:

rows = [
       ["Keyword",  "Category"],
       ]

然后,将我上面的内容作为每个项目的内联 for 循环或作为每个项目调用的单独函数(重新排列为单独的函数):

currVar = A2.text   #If your lifting this from a spreadsheet, openpyxl is prob your goto library - this line is just pseudocode

下面假设您有一个与您要处理的项目相对应的文本条目列表:

for currVar in listOfVars:
    rows.append(categoriseItem(currVar))



def writeToWB(rows):
    import openpyxl
    wb = openpyxl.Workbook()
    ws = wb.active

    for row in rows:
        ws.append(row)

    wb.save("myWorkbook.xlsx")

抱歉,有点脱节 - 我赶时间!

【讨论】:

  • 感谢大家的回复,我对 Python 很陌生,我需要哪些库来运行上面的代码?
  • 关于 openpyxl,如果我可以将数据导入数据框,然后运行关键字映射代码,然后查看结果,以便我可以检查它的工作。下一步是导出文件
  • 是的 - 如果您要导入数据框,我建议您尝试使用向量操作来完成工作 [一次性完成所有列]。虽然在这里没有什么区别,但对于您将来执行的任何繁重任务都会快得多,而且最好早点学习而不是晚点
【解决方案2】:

假设您想对数据进行桶排序/分箱/分类,您可以使用 python dict 进行映射:

keyword = A2.text
mapping = {'handbag': 'Bags', 'rucksack': 'Bags', 'cotton tote': false}
try:
    result = mapping[keyword]
except KeyError:
    print("Keyword not found")

ws['B2'] = result

如果您想避免 if-chain,这也可以与 Amiga500 的答案结合使用。

【讨论】:

  • 您好 Flo,感谢您的回复,上面的代码是否将映射结果放在相邻列中?所以结果会出现在“B”列?
  • 这只是核心映射。您必须将结果放入相应的 excel api 位置/单元格中。不知道你在python中用的是什么excel包。
  • 我正在使用 openpyxl,我猜这是一个相当常见的包
  • 好的,添加了来自 openpyxl 文档的任务。请注意,这或多或少是一个伪代码示例。您需要对输入单元格进行某种迭代,将单元格数据传递给映射代码。
  • 嗯,对了,我说我对 Python 还很陌生,你知道如何将结果映射到相应的列吗?
猜你喜欢
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2021-11-07
  • 2011-06-09
  • 2022-12-01
  • 1970-01-01
  • 2011-02-16
相关资源
最近更新 更多