使用正则表达式后,Pandas .loc无法正常工作吗?

时间:2020-07-13 20:37:47

标签: python regex pandas dataframe

这是我的数据:


player  pos avg
0   Antonio Brown   WR1 1.0
1   Julio Jones (11)    WR2 2.3
2   Odell Beckham Jr. (13)  WR3 2.8
3   Todd Gurley (11)    RB1 4.8
4   DeAndre Hopkins (9) WR4 5.8
... ... ... ...
546 Kai Forbath (7) K31 538.0
547 Cody Parkey K32 539.0
548 Wil Lutz (5)    K33 542.0
549 Andrew Franks   K34 543.0
550 Caleb Sturgis   K35 544.0

我使用了以下正则表达式代码来消除括号和其中的所有字符:

df['player'] = df['player'].str.replace(r"\(.*\)","")

哪个让我得到了我想要的东西:


player  pos adp
0   Antonio Brown   WR1 1.0
1   Julio Jones WR2 2.3
2   Odell Beckham Jr.   WR3 2.8
3   Todd Gurley RB1 4.8
4   DeAndre Hopkins WR4 5.8
... ... ... ...
546 Kai Forbath K31 538.0
547 Cody Parkey K32 539.0
548 Wil Lutz    K33 542.0
549 Andrew Franks   K34 543.0
550 Caleb Sturgis   K35 544.0

但是现在当我使用.loc时,什么都没有显示!

df.loc[(df.player=='Julio Jones')]


player  pos adp pos_adp season

但是当我在原本没有任何括号的列上使用.loc时,它确实起作用:

df.loc[(df.player=='Antonio Brown')]

player  pos adp pos_adp season
0   Antonio Brown   WR1 1.0 1   2016

这真令人沮丧,如果我在列上有效地使用了正则表达式,为什么.loc不起作用?

1 个答案:

答案 0 :(得分:1)

我相信,替换后"Julio Jones (11)"变成了"Julio Jones ",而不是"Julio Jones",因为您摆脱了"(11)",而不是" (11)"。我建议您使用df.player.str.strip()来消除尾随空格。