问题描述一:
dataframe的某一列为字符串格式,想筛选出含有特定字符串的行,如书目数据的“简单分类号”列,筛选包含['N','O','P','Q','S','TB','TM','TN','TP','TS']分类号的数据。
使用模糊匹配,具体实现代码如下:
select_list = ['N','O','P','Q','S','TB','TM','TP']
select_list = '|'.join(select_list)
select_data = data[data['简单分类号'].str.contains(select_list)]
select_data
如果取出不包含这些字符串的数据呢:
在前面加上一个~波浪符号就可以了select_data = data[~data['简单分类号'].str.contains(select_list)]
但是,请注意但是,这样得到的数据有一些问题,TQ,TS这样的类也会取出,因为contains是包含的意思,我们需要得到以select_list内字母开头的行,更好的方法如下:
select_data = data.loc[data['分类号'].str.startswith(tuple(select_list))]
问题描述二:
如果要查找多个列中的特定字符怎么办:
select_not_list = ['高职','高专','中职','中专']
select_not_list = '|'.join(select_not_list)
select_not_data = select_data[(~select_data['列A'].str.contains(select_not_list)) & (~select_data['列B'].str.contains(select_not_list)) & (~select_data['列C'].str.contains(select_not_list))]
问题描述三:
要是多个列,每个列的筛选条件还不一样怎么办:
select_not_data = select_data[~select_data[A1].str.contains('条件1')|select_data[A2].str.contains('条件2‘)]
网友评论