可能不同时,python pandas数据框中的字符串匹配

时间:2018-07-05 20:19:16

标签: python regex string python-3.x pandas

enter image description here

我有一个包含4列的数据框(300,000行)。我有一列“模型”,其中有以下示例值。

  • 1)CPL40AUP50(B,W)(空白,EM,PCEM,MSEM)2)CPL40AUP50(B,W)(400,MS) 3)CPL40AUP50(B,W)PC 4)CPL40AUP50(B,W)PCMS 5)CPL40AUP50 [B,W] [空白, 400] 6)CPL40AUP XXXX XXXXX

在模型字段中,任何值,例如(A,B)都可以是A或B。 例如,字段2表示可能有4种组合 CPL40AUP50B400 CPL40AUP50BMS CPL40AUP50W400 CPL40AUP50WMS 栏位6表示CPL 40 AUP“ XXXX”“ XXXXX”-每次有两个以上连续的XXX,表示在这些位置接受任何字符。 XXX的数量=该位置的字符数

已附加示例数据框。

将示例附加为字典

{“型号”:{152001:“ CPL40AUP50(B,W)(Blank,EM,PCEM,MSEM)”,   152103:'CPL40AUP50(B,W)(400,MS)',   152192:'CPL40AUP50(B,W)PC',   152196:'CPL40AUP50(B,W)PCMS',   291083:'CPL40AUP50 [B,W] [Blank,400]'},  “产品ID”:{152001:“ PGK58TGD”,   152103:'P5QBAPTD',   152192:'PFNJED7R',   152196:'PYSCGR1W',   291083:“ PH57RZA3”},  “已报告的CCT”:{152001:5000.0,   152103:5000.0,   152192:5000.0,   152196:5000.0,   291083:5000.0},  “报告的功率”:{152001:41.07,   152103:41.07,   152192:41.07,   152196:41.07,   291083:40.0}}

第1部分 我要搜索存储在变量中的型号。 此列中的a = CPL40AUP50B400,并返回整行,其中可能存在这种组合。 我只希望找到确切的搜索词并打印行,而不是部分字符串匹配

我将所有“ []”方括号替换为括号“()” 我将所有的“,”逗号都替换为“ |”

我这样做是出于使用正则表达式功能的考虑。但是我无法继续。

第2部分 查找何时有XXX。如果有XXX,则表示可以有任何字符,而不是XXX。

示例:6)CPL40AUP XXXX XXXXX

是指CPL40AUP AAAA AAAAA或CPL40AUP BBBB 11111

任何东西都可以代替XXX。因此,我必须找到一行,其中的型号与XXX以外的所有其他字符都匹配

1 个答案:

答案 0 :(得分:0)

首先,设置一个DataFrame进行测试:

import pandas as pd
model = ["CPL40AUP50(B,W)(Blank ,EM, PCEM, MSEM) ", "CPL40AUP50(B,W) (400, MS) ", "CPL40AUP50(B,W)PC ", "CPL40AUP50(B,W)PCMS ", "CPL40AUP50[B,W][Blank, 400] ", "CPL40AUP XXXX XXXXX"]
df = pd.DataFrame({'Model': model, 'Wattage': range(40, 46)})

对于第一个问题,要获取包含特定字符串(例如“ PC”)的行,请执行以下操作:

df[ df['Model'].str.contains("PC") ]

str.contains("PC")返回的布尔系列为True,如果该行的“型号”字段中包含“ PC”。然后df[ mask ]返回mask为True的行。

“ PC”是一个正则表达式模式,而不仅仅是文字字母。因此,对于您的第二个问题,以下内容将获取包含两个或多个连续X字符的任何行:

df[ df['Model'].str.contains("XX+") ]