我在单列中有多行文本。例如,有一列如下:- NIKE// RT-2 \n PUMA// AB-C \n NIKE// QE-3-R
我不需要"//“和"\n”之间的数据。我只需要像耐克,彪马这样的品牌,我需要他们的数量。例如,在这种情况下,我想知道这一列中有两个耐克和一个彪马。
我是Python的初学者。几个星期以来,我一直在尝试解决这个问题,但仍然没有突破。如果你们能提供帮助,我将不胜感激。干杯。
发布于 2021-03-26 00:29:34
在纯Python中,您可以尝试这样做:
import re
from collections import Counter
row = "NIKE// RT-2 \n PUMA// AB-C \n NIKE// QE-3-R"
counts = Counter([item.replace("//", "") for item in re.findall("\w+//", row)])
print(counts) # Counter({'NIKE': 2, 'PUMA': 1})从这里开始,您只需对每一行进行迭代。
发布于 2021-03-26 00:32:33
这似乎是一个使用正则表达式的好地方。正则表达式(或正则表达式)是可以从字符串中提取特定文本模式的特殊字符串。(https://en.wikipedia.org/wiki/Regular_expression)
对于您的示例,字符串‘’.+(?=//)‘’非常适合它。它主要是告诉计算机在\n和\\之间查找内容并返回文本。在我的示例代码中,我使用正则表达式返回一个列表。
import re
regex = r".+(?=//)"
test_str = ("NIKE// RT-2\n"
"PUMA// AB-C\n"
"NIKE// QE-3-R\n")
matches = re.findall(regex, test_str, re.MULTILINE) #["NIKE", "PUMA", "NIKE"]
results = dict((brand,matches.count(brand)) for brand in set(matches))
print(results)re.findall函数将文本提取到列表中(参见注释)。之后,我使用字典理解创建了一个字典,显示每个品牌的数量。(https://www.datacamp.com/community/tutorials/python-dictionary-comprehension)
最终输出为:
{'NIKE': 2, 'PUMA': 1}https://stackoverflow.com/questions/66803228
复制相似问题