【问题标题】:How to extract only uppercase substring from pandas series?如何从熊猫系列中仅提取大写子字符串?
【发布时间】:2020-10-20 19:37:28
【问题描述】:

我一直在尝试从 pandas 数据框中提取大写子字符串,但没有成功。如何在 pandas 中只提取大写子字符串?

这是我的 MWE:

MWE

import numpy as np
import pandas as pd


df = pd.DataFrame({'col': ['cat', 'cat.COUNT(example)','cat.N_MOST_COMMON(example.ord)[2]']})
df['feat'] = df['col'].str.extract(r"[^A-Z]*([A-Z]*)[^A-Z]*")


print(df)

"""
                                 col feat
0                                cat  NaN
1                 cat.COUNT(example)    T
2  cat.N_MOST_COMMON(example.ord)[2]    N
""";

预期输出

                                 col feat
0                                cat  
1                 cat.COUNT(example)    COUNT
2  cat.N_MOST_COMMON(example.ord)[2]    N_MOST_COMMON

【问题讨论】:

  • 请分享您的预期输出。
  • 可能与this question 重复。无论如何,您可以在 lambda 函数中应用任何这些替代方法,就像这里的答案一样。
  • @CainãMaxCouto-Silva 这个问题是关于正则表达式模块的,这里我尝试使用 pandas str EXTRACT 方法而不是 re.sub 方法。
  • @MilkyWay001 看来 Quang 已经为你准备好了。
  • @MilkyWay001,知道了!看起来你有你的(相当整洁的)答案然后=)

标签: python pandas


【解决方案1】:

怎么样:

 df['feat'] = df.col.str.extract('([A-Z_]+)').fillna('')

输出:

                                 col           feat
0                                cat               
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON

【讨论】:

  • 我很欣赏提取方法。实际上我想从字符串中提取aggfeat。在更新此问题之前,我将提出新问题作为跟进。
  • 我有更复杂的问题要在这里使用提取:stackoverflow.com/questions/64452644/…
【解决方案2】:

如果您说每个单元格中只有一个大写单词,您也可以使用replace

df['feat'] = df['col'].str.replace(r"[^A-Z_]", '')

Out[681]:
                                 col           feat
0                                cat
1                 cat.COUNT(example)          COUNT
2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON

【讨论】:

    【解决方案3】:

    您可以将re.sub()[^A-Z|_] 模式一起使用:

    import re
    df = pd.DataFrame({'col': ['cat', 'cat.COUNT(example)','cat.N_MOST_COMMON(example.ord)[2]']})
    df['feat'] = df['col'].apply(lambda x: re.sub('[^A-Z|_]', '', x))
    df
    Out[1]: 
                                     col           feat
    0                                cat               
    1                 cat.COUNT(example)          COUNT
    2  cat.N_MOST_COMMON(example.ord)[2]  N_MOST_COMMON
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2019-10-10
      • 2018-11-06
      • 2016-10-22
      • 2020-06-03
      • 1970-01-01
      相关资源
      最近更新 更多