【问题标题】:Need to split a column but only removing the character需要拆分一列但只删除字符
【发布时间】:2022-01-26 12:20:33
【问题描述】:

早上好。在我的 df 和我的代码的前 20 行下方。

当我尝试用“split 仅删除字符,split('<')[0] 返回 KeyError。

任何想法如何让它工作?

第一个想要的链接:

http://africa.espn.com/college-sports/football/recruiting/player/_/id/222687/kayvon-thibodeaux

    0
0   <a class="back" href="http://africa.espn.com/college-sports/football/recruiting/rankings">Back to Ranking Index</a>
1   <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/222687/kayvon-thibodeaux" name=""></a>
2   <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/222687/kayvon-thibodeaux"><strong>Kayvon Thibodeaux</strong></a>
3   <a href="http://insider.espn.com/college-sports/football/recruiting/player/evaluation/_/id/222687/kayvon-thibodeaux">Scouts Report</a>
4   <a href="http://africa.espn.com/college-sports/football/recruiting/playerrankings/_/view/rn300/sort/rank/class/2019"><img border="0" class="floatleft" src="https://a.espncdn.com/i/recruiting/logos/2012/sml/rn-300_sml.png" title="ESPN 300"/></a>
5   <a href="http://africa.espn.com/college-sports/football/recruiting/school/_/id/2483/class/2019/oregon-ducks"><img class="valign-logo" src="https://a.espncdn.com/combiner/i?img=/i/teamlogos/ncaa/500/2483.png?w=110&amp;h=110&amp;transparent=true" style="width: 50px"/></a>
6   <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/226752/nolan-smith" name=""></a>
7   <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/226752/nolan-smith"><strong>Nolan Smith</strong></a>
8   <a href="http://insider.espn.com/college-sports/football/recruiting/player/evaluation/_/id/226752/nolan-smith">Scouts Report</a>
9   <a href="http://africa.espn.com/college-sports/football/recruiting/playerrankings/_/view/rn300/sort/rank/class/2019"><img border="0" class="floatleft" src="https://a.espncdn.com/i/recruiting/logos/2012/sml/rn-300_sml.png" title="ESPN 300"/></a>
10  <a href="http://africa.espn.com/college-sports/football/recruiting/school/_/id/61/class/2019/georgia-bulldogs"><img class="valign-logo" src="https://a.espncdn.com/combiner/i?img=/i/teamlogos/ncaa/500/61.png?w=110&amp;h=110&amp;transparent=true" style="width: 50px"/></a>
11  <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/216987/kenyon-green" name=""></a>
12  <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/216987/kenyon-green"><strong>Kenyon Green</strong></a>
13  <a href="http://insider.espn.com/college-sports/football/recruiting/player/evaluation/_/id/216987/kenyon-green">Scouts Report</a>
14  <a href="http://africa.espn.com/college-sports/football/recruiting/playerrankings/_/view/rn300/sort/rank/class/2019"><img border="0" class="floatleft" src="https://a.espncdn.com/i/recruiting/logos/2012/sml/rn-300_sml.png" title="ESPN 300"/></a>
15  <a href="http://africa.espn.com/college-sports/football/recruiting/school/_/id/245/class/2019/texas-aggies"><img class="valign-logo" src="https://a.espncdn.com/combiner/i?img=/i/teamlogos/ncaa/500/245.png?w=110&amp;h=110&amp;transparent=true" style="width: 50px"/></a>
16  <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/222156/evan-neal" name=""></a>
17  <a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/222156/evan-neal"><strong>Evan Neal</strong></a>
18  <a href="http://insider.espn.com/college-sports/football/recruiting/player/evaluation/_/id/222156/evan-neal">Scouts Report</a>
19  <a href="http://africa.espn.com/college-sports/football/recruiting/playerrankings/_/view/rn300/sort/rank/class/2019"><img border="0" class="floatleft" src="https://a.espncdn.com/i/recruiting/logos/2012/sml/rn-300_sml.png" title="ESPN 300"/></a>
20  <a href="http://africa.espn.com/college-sports/football/recruiting/school/_/id/333/class/2019/alabama-crimson-tide"><img class="valign-logo" src="https://a.espncdn.com/combiner/i?img=/i/teamlogos/ncaa/500/333.png?w=110&amp;h=110&amp;transparent=true" style="width: 50px"/></a>



#players.to_excel('Player_Links.xlsx')
players = pd.read_excel('Player_Links.xlsx')
players['Links'] = players.iloc[:,1]
players = players[players['Links'].str.contains('strong')]
players['Links'] = players['Links'].str.replace('<a href="','')
players['Links'] = players['Links'].str.split('<')
print(players)

【问题讨论】:

  • 你想做什么?只是获取链接?
  • 是的,没错。
  • @chitown88 但我不需要所有链接。只是那些带有强标签的人

标签: python pandas


【解决方案1】:

你也可以用正则表达式做任何事情:

players = pd.read_excel('Player_Links.xlsx')
players['Links'] = players.iloc[:,1]
regex = r"(http:.*)\">.*<strong>"
players = players.Links.str.findall(regex)
# only keep the rows for which the regex hit
players = players[players.apply(lambda li: len(li) == 1)]
# flatten the list
players = players.apply(lambda li: li[0])
print(players)

【讨论】:

    【解决方案2】:

    过滤您的 datframe 以获取带有 &lt;strong&gt; 标记的行。然后只需要我们 BeautifulSoup 来解析 html。在 lambda 函数中使用它:

    from bs4 import BeautifulSoup
    import pandas as pd
    
    
    df = pd.DataFrame( [   
    ['<a class="back" href="http://africa.espn.com/college-sports/football/recruiting/rankings">Back to Ranking Index</a>'],
    ['<a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/222687/kayvon-thibodeaux" name=""></a>'],
    ['<a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/222687/kayvon-thibodeaux"><strong>Kayvon Thibodeaux</strong></a>'],
    ['<a href="http://insider.espn.com/college-sports/football/recruiting/player/evaluation/_/id/222687/kayvon-thibodeaux">Scouts Report</a>'],
    ['<a href="http://africa.espn.com/college-sports/football/recruiting/playerrankings/_/view/rn300/sort/rank/class/2019"><img border="0" class="floatleft" src="https://a.espncdn.com/i/recruiting/logos/2012/sml/rn-300_sml.png" title="ESPN 300"/></a>'],
    ['<a href="http://africa.espn.com/college-sports/football/recruiting/school/_/id/2483/class/2019/oregon-ducks"><img class="valign-logo" src="https://a.espncdn.com/combiner/i?img=/i/teamlogos/ncaa/500/2483.png?w=110&amp;h=110&amp;transparent=true" style="width: 50px"/></a>'],
    ['<a href="http://africa.espn.com/college-sports/football/recruiting/player/_/id/226752/nolan-smith" name=""></a>']],
        columns=[0])
    
    df_filter = df[df[0].str.contains('<strong>')]
    
    df_filter[0] = df_filter[0].apply(lambda row: BeautifulSoup(row, 'html.parser').find('a')['href'])
    

    输出:

    这给我们留下了我上面使用的样本集中的这个:

    print(df_filter.to_string())
                                                                                                    0
    2  http://africa.espn.com/college-sports/football/recruiting/player/_/id/222687/kayvon-thibodeaux
    

    【讨论】:

    • 谢谢!这行得通。我以前没有用过这样的BS。我很感激。
    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2011-09-20
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多