簡體   English   中英

從字符串列表中提取特定的 substring

[英]Extracting specific substring from a list of strings

由於缺少更好的術語,我正在嘗試合並下面的字符串-我想識別“BB”的所有示例並將它們更改為“BB”,對於“B”到“B”的所有示例都相同,並且相同對於所有 CCC 示例,以使所有類別統一。 以下是列表中所有獨特示例的列表:

array(['BB+', 'B-', 'BB', 'BB-', 'CCC+', 'N.A.', 'CCC', 'B+', 'B', None,
       'BB *-', 'B- *+', 'CC *-', 'B+ *-', 'BB- *-', 'NR', 'CCC-', 'BBB-',
       'B+ *+', 'BB+ *+', 'B *+', 'BB *+', 'D', 'BB+ *-', 'CCC+ *+',
       'BBB', 'C *-', 'CCC+ *-', 'BB- *+', 'CCC *+', 'FLD UNKNO',
       '(P)CCC+', '(P)B+', 'C', 'CCC- *-', 'BBB- *-'], dtype=object)

例如,所有 'BB+' 都將更改為 'BB'

'BB+ *+' 之類的示例相同,將僅轉換為 'BB'

我一直在使用

.str.find('BB').replace(0,'BB')

在 dataframe 的特定列上,但問題是所有 B+/-/flat 和 CCC 示例都被標識為 -1,所以我無法從那里區分。

理想的 output 將是:

BB+、BB、BB-,任何帶有 *+、*-、(P) 等的迭代都將 output 到 BB

B+、B、B-、*+、*-、(P) 等的任何迭代將 output 到 B

CCC+, CCC, CCC- 任何帶有 *+, *-, (P) 的迭代將 output 到 CCC

for i in range(len(npArr)):
  if 'BBB' in npArr[i]:
    npArr[i] = 'BBB'
  elif 'BB' in npArr[i]:
    npArr[i] = 'BB'
  elif 'B' in npArr[i]:
    npArr[i] = 'B'
  elif 'CCC' in npArr[i]:
    npArr[i] = 'CCC'

我不得不改變一些事情來完成這項工作。 首先,我將數組的 dtype 更改為dtype=str 我不確定這對你來說是否是一個重大變化,但否則需要更多的工作。 其次,我將數組設置為變量npArr

這是 output:

['BB' 'B' 'BB' 'BB' 'CCC' 'N.A.' 'CCC' 'B' 'B' 'None' 'BB' 'B' 'CC *-' 'B'
 'BB' 'NR' 'CCC' 'BBB' 'B' 'BB' 'B' 'BB' 'D' 'BB' 'CCC' 'BBB' 'C *-' 'CCC'
 'BB' 'CCC' 'FLD UNKNO' 'CCC' 'B' 'C' 'CCC' 'BBB']

如果lst是您的問題列表,則此示例更改BBBCCC值:

import re

pat = re.compile(r"\b(?:B{1,2}|CCC)\b")

out = []
for item in lst:
    if not isinstance(item, str):
        out.append(item)
        continue

    m = pat.search(item)
    if m:
        out.append(m.group(0))
    else:
        out.append(item)

for a, b in zip(out, lst):
    print(b, a, sep="\t")

印刷:

BB+     BB
B-      B
BB      BB
BB-     BB
CCC+    CCC
N.A.    N.A.
CCC     CCC
B+      B
B       B
None    None
BB *-   BB
B- *+   B
CC *-   CC *-
B+ *-   B
BB- *-  BB
NR      NR
CCC-    CCC
BBB-    BBB-
B+ *+   B
BB+ *+  BB
B *+    B
BB *+   BB
D       D
BB+ *-  BB
CCC+ *+ CCC
BBB     BBB
C *-    C *-
CCC+ *- CCC
BB- *+  BB
CCC *+  CCC
FLD UNKNO       FLD UNKNO
(P)CCC+ CCC
(P)B+   B
C       C
CCC- *- CCC
BBB- *- BBB- *-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM