【问题标题】:Pandas .loc doesn't work after using a regex?使用正则表达式后 Pandas .loc 不起作用?
【发布时间】:2020-11-03 02:57:22
【问题描述】:

这是我的数据:


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 不起作用?

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    我相信替换后"Julio Jones (11)" 变成了"Julio Jones " 而不是"Julio Jones",因为你摆脱了"(11)",而不是" (11)"。我建议你使用df.player.str.strip() 去掉尾随和前导空格。

    【讨论】:

    • 我认为可能是这种情况,但我在 loc 中添加了一个空格:df.loc[(df.player=='Julio Jones ')] 仍然没有出现。我现在就试试 .strip()。编辑:剥离工作。这在很多层面上都是绝对的救星。太感谢了。你知道为什么使用 .loc 和最后的空格不起作用吗?本质上,我正在寻找列中的确切值...
    • 不错。我不确定,但也许它不起作用,因为您数据中的那个空间不是常规空间,而是一个特殊字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多