Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理字符串模式类别 问题_Python_Regex_Pandas - Fatal编程技术网

Python 如何处理字符串模式类别 问题

Python 如何处理字符串模式类别 问题,python,regex,pandas,Python,Regex,Pandas,我在dataframe中有一个列,它有4种不同的字符串模式,如: COLUMN | 'NE=123' 'NE=123, FR=4' 'NE=123, FR=4, S=5, CP=6' 'NE=123, FR=4, S=5, CP=6, SC=78, PP=99' 我想创建一列对模式进行编码,以便输出如下: COLUMN | CATEGORY AA=123

我在dataframe中有一个列,它有4种不同的字符串模式,如:

COLUMN |  
'NE=123'  
'NE=123, FR=4'  
'NE=123, FR=4, S=5, CP=6'  
'NE=123, FR=4, S=5, CP=6, SC=78, PP=99'
我想创建一列对模式进行编码,以便输出如下:

COLUMN                                |  CATEGORY
AA=123                                | A
AA=123, BB=4                          | AB
AA=123, BB=4, CC=5, DD=6              | ABCD
AA=123, BB=4, CC=5, DD=6, EE=78, FF=99| ABCDEF  
我试着看看这样做是否有效

A = 'AA'
B = 'BB'  
C = ['CC', 'DD']
D = ['EE', 'FF']
df[df['COLUMNS'].str.contains(A, B, '|'.join(C)==False, '|'.join(D)==False)]  
但我也得到了包含C和D的行。

尝试以下方法:

数据帧:

d={'COLUMN': 
['AA=123' ,
'AA=123, BB=4',  
'AA=123, BB=4, CC=5, DD=6 ', 
'AA=123, BB=4, CC=5, DD=6, EE=78, FF=99']}

df=pd.DataFrame(d)
查找模式的函数:

def f(s):
  m=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

  p = []
  r=''

  for x in s:
    if x in m and x not in p:
      p.append(x)
      r+=str(x)

  return r

创建
类别
列:

df['Category']=df['COLUMN'].apply(lambda x :  f(x))
输出:

    COLUMN                                  Cateory
0   AA=123                                  A
1   AA=123, BB=4                            AB
2   AA=123, BB=4, CC=5, DD=6                ABCD
3   AA=123, BB=4, CC=5, DD=6, EE=78, FF=99  ABCDEF
                                column_1  index     category
0                                 NE=123      0           NE
1                           NE=123, FR=4      1         FRNE
2                NE=123, FR=4, S=5, CP=6      2      CPFRNES
3  NE=123, FR=4, S=5, CP=6, SC=78, PP=99      3  CPFRNEPPSSC

我将使用lambda中的函数组合来实现:

import pandas as pd
import re
df = pd.DataFrame({'column_1':['NE=123','NE=123, FR=4' ,'NE=123, FR=4, S=5, CP=6',
                               'NE=123, FR=4, S=5, CP=6, SC=78, PP=99'],
                    'index':[0,1,2,3]})
print(df)
df['category'] = df['column_1'].apply(lambda x: ''.join(sorted(list(set(re.findall(r'[A-Z]+',x))))))
print(df)
输出:

    COLUMN                                  Cateory
0   AA=123                                  A
1   AA=123, BB=4                            AB
2   AA=123, BB=4, CC=5, DD=6                ABCD
3   AA=123, BB=4, CC=5, DD=6, EE=78, FF=99  ABCDEF
                                column_1  index     category
0                                 NE=123      0           NE
1                           NE=123, FR=4      1         FRNE
2                NE=123, FR=4, S=5, CP=6      2      CPFRNES
3  NE=123, FR=4, S=5, CP=6, SC=78, PP=99      3  CPFRNEPPSSC

出于某种原因,它会生成空字符串作为结果传输,请检查我的数据框是否与您的数据框相同,我是否使用产生错误的真实数据示例编辑了startpost。好的,函数
f()
中的
m
仅在H之前没有所有的应用程序,这就是它给出空结果的原因,检查它是否对你有用,因为某些原因它不会产生第三类。我用真实数据的例子编辑了startpost,不知道它是否有意义