亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果子字符串出現在肯定列表中,則將它們保留在 Pandas 中

如果子字符串出現在肯定列表中,則將它們保留在 Pandas 中

慕的地8271018 2021-11-02 16:54:45
我想刪除 Pandas 數據框中的子字符串,只保留子字符串中出現在 positiv 列表中的那些部分。我設法反過來做:刪除出現在否定列表中的字符串的所有部分。df['Who'] = ['cute little bear', 'a quick brown fox', 'a bear and a fox']negative_list = ['cute', 'little', 'a', 'quick', 'brown'. 'and']positive_list = ['bear', 'fox']for n in negative_list:    df['Who'] = d['Who'].str.replace(n, '', re.IRNORECASE)現在結果將如預期的那樣:df['Who'] = ['bear', 'fox', 'bear fox']我正在尋找的是一種解決方案,我可以只保留出現在肯定列表中的字符串,而不是刪除數英里長的否定列表。
查看完整描述

2 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

如果您不堅持使用一行解決方案,您可以將句子分成幾部分,只保留有效單詞并重新組合在一起:


extract = df['Who'].str.extractall('([^ ]+)')

ok = extract.isin(positive_list)[0].values

df['Who'] =  extract.loc[ok, :].groupby(level=0).agg(' '.join)


查看完整回答
反對 回復 2021-11-02
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

這個解決方案比 Joerg (+1) 的解決方案簡潔得多,但對我來說更容易理解(因為我沒有關于 extractall pandas 系列函數的先驗知識)。它只是在迭代時創建一個新列表并替換舊列表:


import pandas as pd


whoList=['cute little bear', 'a quick brown fox', 'a bear and a fox']

df=pd.DataFrame({'Who':whoList})

positive_list = ['bear', 'fox']


newStringList=[]

for who in whoList:

    newStringList.append('')

    for i in positive_list:        

        if i in who:

            newStringList[-1]=newStringList[-1]+i+" "   


df['Who']=newStringList


查看完整回答
反對 回復 2021-11-02
  • 2 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號