使用contains()中的regex从Pandas数据框中选择具有某个字符串值(大写或小写)的行

4sup72z8  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(123)

我想使用contains()方法中的regex根据列的值从Pandas数据框中提取行。
如果"COMPTYPE"列包含contains()方法中提到的任何字符串值,我将使用以下代码行从数据框中提取行

df = df[df['COMPTYPE'].astype(str).str.contains('MCCB|ACB|VCB|CONTACTOR', regex=True)]

它工作正常,但它没有选择那些在'COMPTYPE'列中有MccB或Vcb或Contactor或acb等值的行。如何使用此命令,以便它将不考虑字符串值的大小写而选择行。
输入:
| 博尔迪布诺|子组件_IBNO|部件类型|
| - ------|- ------|- ------|
| 小行星104444001|小行星9044444001|ACB|
| 小行星104444001|小行星9044444002|继电器|
| 小行星104444001|小行星9044444003| Jmeter |
| 小行星104444001|小行星9044444004|MCCB/MPCB|
| 小行星104444001|小行星9044444005|vcb|
| 小行星104444001|小行星9044444006|MCCB/MPCB|
| 小行星104444001|小行星9044444007|acb|
| 小行星104444001|小行星9044444008|多氯联苯|
| 小行星104444001|小行星9044444009|MCCB/MPCB|
| 小行星104444001|小行星90444440|电源接触器|
| 小行星104444001|小行星9044444011|电源接触器|
| 小行星104444001|小行星90444440一二|控制接触器|
| 小行星104444001|小行星9044444013|真空断路器|
预期输出如下所示,
| 博尔迪布诺|子组件_IBNO|部件类型|
| - ------|- ------|- ------|
| 小行星104444001|小行星9044444001|ACB|
| 小行星104444001|小行星9044444004|MCCB/MPCB|
| 小行星104444001|小行星9044444005|vcb|
| 小行星104444001|小行星9044444006|MCCB/MPCB|
| 小行星104444001|小行星9044444007|acb|
| 小行星104444001|小行星9044444008|多氯联苯|
| 小行星104444001|小行星9044444009|MCCB/MPCB|
| 小行星104444001|小行星90444440|电源接触器|
| 小行星104444001|小行星9044444011|电源接触器|
| 小行星104444001|小行星90444440一二|控制接触器|
| 小行星104444001|小行星9044444013|真空断路器|
但是,我得到了以下输出,
| 博尔迪布诺|子组件_IBNO|部件类型|
| - ------|- ------|- ------|
| 小行星104444001|小行星9044444001|ACB|
| 小行星104444001|小行星9044444004|MCCB/MPCB|
| 小行星104444001|小行星9044444005|MCCB/MPCB|
| 小行星104444001|小行星9044444006|MCCB/MPCB|
| 小行星104444001|小行星90444440|真空断路器|
怎么办?请帮帮忙!

laawzig2

laawzig21#

只需使用flags=re.IGNORECASE作为str.contains的参数或使用@JoanLara建议的case=False

import re
out = (df[df['COMPTYPE'].astype(str)
          .str.contains('MCCB|ACB|VCB|CONTACTOR', regex=True, flags=re.IGNORECASE)]

print(out)

# Output
     BOARDIBNO  SUBCOMP_IBNO           COMPTYPE
0   1044444001    9044444001                ACB
3   1044444001    9044444004          MCCB/MPCB
4   1044444001    9044444005                vcb
5   1044444001    9044444006          MCCB/MPCB
6   1044444001    9044444007                acb
7   1044444001    9044444008               mccb
8   1044444001    9044444009          MCCB/MPCB
9   1044444001    9044444010    Power Contactor
10  1044444001    9044444011    Power Contactor
11  1044444001    9044444012  Control Contactor
12  1044444001    9044444013                VCB

或大写前一列:

>>> out = df[df['COMPTYPE'].astype(str).str.upper()
             .str.contains('MCCB|ACB|VCB|CONTACTOR', regex=True)]

print(out)

# Output
     BOARDIBNO  SUBCOMP_IBNO           COMPTYPE
0   1044444001    9044444001                ACB
3   1044444001    9044444004          MCCB/MPCB
4   1044444001    9044444005                vcb
5   1044444001    9044444006          MCCB/MPCB
6   1044444001    9044444007                acb
7   1044444001    9044444008               mccb
8   1044444001    9044444009          MCCB/MPCB
9   1044444001    9044444010    Power Contactor
10  1044444001    9044444011    Power Contactor
11  1044444001    9044444012  Control Contactor
12  1044444001    9044444013                VCB

相关问题