[英]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]
任何幫助將不勝感激。 謝謝
我們可以使用str.contains
中的df.columns
方法來應用正則表達式。
cond = df.columns.str.contains('CONT|RF|@NAS')
df[df.columns[cond]]
嘗試使用[...]
選擇isin
和str.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.