我有一个包含4列的数据框(300,000行)。我有一列“模型”,其中有以下示例值。
在模型字段中,任何值,例如(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以外的所有其他字符都匹配
答案 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+") ]