簡體   English   中英

使用正則表達式提取具有特定字符串的列名

[英]Extracting ColumnNames with a specific String using Regular Expression

我有一個 dataframe 如下:(示例如下所示。它具有超過 10000 列的類似形式)

   df 
        
    CONT  RF GHT AT@RT@NAS@VRT=Y ON@RV@NAS@VTP=Y  QR@RZ@RG@NVR@VPQ=N  QR@RZ@RG@NAS@VVV=N
     1    3   4     5                 7                11                 12
     10   2   5     9                 6                11                 16

所以我想要做的是提取列'CONT','RF'和模式'@NAS'的所有列

所以我的 output dataframe (在示例中應該是這樣的):

 df_out 
        
    CONT  RF AT@RT@NAS@VRT=Y ON@RV@NAS@VTP=Y  QR@RZ@RG@NAS@VVV=N 
     1    3       5                 7                11                 
     10   2       9                 6                11  

我嘗試了以下方法,但它沒有提取帶有“@NAS”的列

   selCols = ["CONT", "RF",  "@NAS*"]
   cols = df.columns
   msk_pt = '|'.join(selCols)
   req = re.compile(msk_pt)

   newCols = [line for line in cols if req.match(line)] 

   df_out = df[newCols]  

任何幫助將不勝感激。 謝謝

您可以將df.filterpd.concat一起使用:

In [2635]: res = pd.concat([df[['CONT', 'RF']], df.filter(like='@NAS')], axis=1)

In [2636]: res
Out[2636]: 
   CONT  RF  AT@RT@NAS@VRT=Y  ON@RV@NAS@VTP=Y  QR@RZ@RG@NAS@VVV=N
0     1   3                5                7                  12
1    10   2                9                6                  16

我們可以使用str.contains中的df.columns方法來應用正則表達式。

cond = df.columns.str.contains('CONT|RF|@NAS')
df[df.columns[cond]]

嘗試使用[...]選擇isinstr.contains

df_out = df[df.columns[df.columns.isin(['CONT', 'RF']) | df.columns.str.contains('@NAS')]]
print(df_out)

Output:

   CONT  RF  AT@RT@NAS@VRT=Y  ON@RV@NAS@VTP=Y  QR@RZ@RG@NAS@VVV=N
0     1   3                5                7                  12
1    10   2                9                6                  16

將列表推導與re.search一起使用:

pattern = r'^(?:CONT|RF|.*@NAS.*)$'
cols = df.columns
newCols = [c for c in cols if re.search(pattern, c)]
df_out = df[newCols] 

你差不多完成了,我會做一點改變:

   import re

   COLUMNS_REGEX = "CONT|RF|@NAS"
   cols = df.columns
   newCols = [col for col in cols if re.search(COLUMNS_REGEX, col)]
   df_out = df[newCols]

暫無
暫無

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

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