Pandas:使用Regex从列中选择行

时间:2016-07-29 16:04:25

标签: regex pandas

我想从列<ImageView android:layout_width="150dp" android:layout_height="150dp" android:id="@+id/imageView2" android:src="@drawable/logo" android:layout_marginTop="64dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:adjustViewBounds="false" android:background="@drawable/circle_shape" android:clickable="false" /> 中提取以H或S为第一个值的行:

feccandid

我正在使用此代码:

    cid     amount  date    catcode     feccandid
0   N00031317   1000    2010    B2000   H0FL19080
1   N00027464   5000    2009    B1000   H6IA01098
2   N00024875   1000    2009    A5200   S2IL08088
3   N00030957   2000    2010    J2200   S0TN04195
4   N00026591   1000    2009    F3300   S4KY06072
5   N00031317   1000    2010    B2000   P0FL19080
6   N00027464   5000    2009    B1000   P6IA01098
7   N00024875   1000    2009    A5200   S2IL08088
8   N00030957   2000    2010    J2200   H0TN04195
9   N00026591   1000    2009    F3300   H4KY06072

返回错误: campaign_contributions.loc[campaign_contributions['feccandid'].astype(str).str.extractall(r'^(?:S|H)')]

有使用Regex经验的人是否知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

对于这么简单的事情,你可以绕过正则表达式:

relevant = campaign_contributions.feccandid.str.startswith('H') | \
    campaign_contributions.feccandid.str.startswith('S')
campaign_contributions[relevant]

但是,如果要使用正则表达式,可以将其更改为

relevant = ~campaign_contributions['feccandid'].str.extract(r'^(S|H)').isnull()

请注意,astype是多余的,而extract就足够了。

答案 1 :(得分:1)

为什么不使用str.match代替提取和否定?

df[df['col'].str.match(r'^(S|H)')]

(我来到这里寻找相同的答案,但提取物的使用看起来很奇怪,所以我找到了str.ops的文档。

w ^