1、根据值在是否在列表中进行切片:
方法一:使用isin方法可以根据DataFrame中的某列的值是否在某个列表中来进行切片(注意:这里不要直接使用in,否则会报错),代码如下:
pf = pd.DataFrame([['74-27-EA-4D-93-BD','act_click','click_news',3],['E0-3F-49-79-C8-97','act_biz','click_hb.seb',199],
['E0-3F-49-79-C8-97', 'msg_view', '1', 4],
['E0-3F-49-79-C8-97', 'msg_view', '2', 36],
['E0-3F-49-79-C8-97', 'msg_view', '3', 2],
['40-8D-5C-98-35-70', 'act_biz', 'click_hb.wet', 7],
['74-27-EA-4D-93-BD', 'act_biz', 'click_hb.wet', 5]],
columns=['MAC','ACT','ACT_POINT','CLICKS'])
print(pf)
lt = ['click_news','click_hb.seb','click_hb.wet']
print(pf.loc[pf['ACT_POINT'].isin(lt)])
print(pf[pf['ACT_POINT'].isin(lt)])
结果如下:
MAC ACT ACT_POINT CLICKS
0 74-27-EA-4D-93-BD act_click click_news 3
1 E0-3F-49-79-C8-97 act_biz click_hb.seb 199
5 40-8D-5C-98-35-70 act_biz click_hb.wet 7
6 74-27-EA-4D-93-BD act_biz click_hb.wet 5
MAC ACT ACT_POINT CLICKS
0 74-27-EA-4D-93-BD act_click click_news 3
1 E0-3F-49-79-C8-97 act_biz click_hb.seb 199
5 40-8D-5C-98-35-70 act_biz click_hb.wet 7
6 74-27-EA-4D-93-BD act_biz click_hb.wet 5
方法二:这里再讲一种方法使用列的str计算来返回,这种方法可以在更大广阔的地方使用,例如可以实现类似SQL方法中的like方法。
主旨,是使用str.extract()方法来判断,由于extract可以使用正则表达式,所以使用起来比较方便。
具体str.extract方法的讲解,可以参见官方原文,讲解得比较好:http://pandas.pydata.org/pandas-docs/stable/user_guide/text.html
str.extract方法主要有两个参数:
第一个参数是正则表达式,也就需要匹配的子字符串;
第二个参数表示是否需要返回匹配的值。
首先看一下str.extract()方法的执行效果:
In:
print(pf['ACT_POINT'].str.extract('(click_news|click_hb.seb|click_hb.wet)', expand=False))
Out:
0 click_news
1 click_hb.seb
2 NaN
3 NaN
4 NaN
5 click_hb.wet
6 click_hb.wet
Name: ACT_POINT, dtype: object
从上面的实践可以看出,只需要把非空的值取出来,主可以达到我们上面isin方法的相同的效果。所以接下来的代码也是水到渠成了:
print(pf[pf['ACT_POINT'].str.extract('(click_news|click_hb.seb|click_hb.wet)', expand=False).notnull()])
版权声明:本文为wx0628原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。