【问题标题】:extract uppercase words from string从字符串中提取大写单词
【发布时间】:2023-02-03 18:42:10
【问题描述】:

我想从数据集 X 的 columnY 中的字符串中提取所有完整的大写单词(不仅是第一个字母,还有单词中的所有字母)

我有以下脚本:

X['uppercase'] = X['columnY'].str.extract('([A-Z][A-Z]+)')

但这只会提取字符串中的第一个大写单词。

然后我尝试了 extractall:

X['uppercase'] = X['columnY'].str.extractall('([A-Z][A-Z]+)')

但我收到以下错误:

类型错误:插入列的索引与框架索引不兼容

我究竟做错了什么?

【问题讨论】:

  • 您在这里想要的实际输出是什么?你想要一个单身的以空格分隔的大写单词的列,或列,每个大写单词(或其他)一个?
  • 两者都可以,但我更喜欢一列所有大写单词(空格分隔)

标签: python


【解决方案1】:

我们可以使用正则表达式和列表理解如下

import re

def extract_uppercase_words(text):
    return re.findall(r'[A-Z]+', text)

X['columnY'].apply(extract_uppercase_words)

【讨论】:

    【解决方案2】:

    假设你只要列中有单词,您可以尝试:

    X["uppercase"] = X["columnY"].str.replace(r's*w*[a-z]w*s*', ' ', regex=True)
                                 .str.replace(r's{2,}', ' ', regex=True)
                                 .str.strip()
    

    第一个替换目标不是所有大写的单词(被定义为任何单词至少有一个小写字母),以及任何周围的空间。我们只用一个空格替换。第二次替换以任何多余的空间为目标,并仅替换为一个空格。

    【讨论】:

    • 也许添加一些关于该技术的解释?
    • 我已经编辑了我的问题,因为我只需要完全大写的单词。所以,不是“狗”这个词,而是“狗”这个词。
    • 答案已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2016-09-06
    • 2016-12-27
    • 2023-04-03
    • 2017-02-14
    相关资源
    最近更新 更多