这是我所拥有的:
import re
import pandas as pd
d = {'ID': [1, 2, 3, 4, 5], 'Desc': ['0*1***HHCM', 'HC:83*20', 'HC:5*2CASL', 'DM*72\nCAS*', 'HC:564*CAS*5']}
df = pd.DataFrame(data=d)
df
Output:
ID Desc
0 1 0*1***HHCM
1 2 HC:83*20
2 3 HC:5*2CASL
3 4 DM*72\nCAS*
4 5 HC:564*CAS*5
如果数据框包含不包含字母或数字的“ CAS”或“ HC”,则需要按“ Desc”列过滤数据框。
这是我尝试过的:
new_df = df[df['Desc'].str.match(r'[^A-Za-z0-9]CAS[^A-Za-z0-9]|[^A-Za-z0-9]HC[^A-Za-z0-9]') == True]
它返回一个空的数据框。
我希望它返回以下内容:
ID Desc
1 2 HC:83*20
2 3 HC:5*2CASL
3 4 DM*72\nCAS*
4 5 HC:564*CAS*5
[另一件事:由于第三行具有“ \ nCas”,其中“ \ n”是行分隔符,是否会将其视为在“ CAS”之前的字母?
请帮助。
您可以尝试一下,它只检查CAS和HC之前的数字和字母,但是您也可以轻松地将其修改为:]
print(df[~df['Desc'].str.contains('([0-9a-zA-Z]+CAS*)|([0-9a-zA-Z]+HC*)', regex=True)])
ID Desc
1 2 HC:83*20
3 4 DM*72\nCAS*
4 5 HC:564*CAS*5