Python 如何处理字符串模式类别 问题
我在dataframe中有一个列,它有4种不同的字符串模式,如: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
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,不知道它是否有意义