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

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

根據不同條件從 Pandas DataFrame 中的列中減去某些部分

根據不同條件從 Pandas DataFrame 中的列中減去某些部分

慕婉清6462132 2021-09-25 10:11:51
我有一個如下所示的 DataFrame: id         Name              New_Name100263   Test Index (UHD)    Test Index100264   Test Num             Test Num正如您所看到的,當我的Name列中的值包含 時(,我只想要此字符串的左側部分,例如:Test Index (UHD)-> Test Index; 但是,如果字符串不包含(,我想要整個字符串,例如:Test Num->Test Num我有一個想法,我可以遍歷此列中的所有值以進行更改,例如對于第一個值,我的想法是try:    pos=data.iloc[0,1].index('(')except:    pos=len(data.iloc[0,1])New_Name =data.iloc[0,2][:pos]我不認為它應該那么復雜,所以有什么簡單的方法可以做到這一點?謝謝
查看完整描述

3 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

這是一個用于刪除括號下任何內容的單行:


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

輸出:


>>df


 id         Name              New_Name

100263   Test Index (UHD)    Test Index

100264   Test Num             Test Num


查看完整回答
反對 回復 2021-09-25
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

假設您只有一個括號組件,您可以像這樣簡化調用

data[ 'New_Name' ] = data.Name.apply( lambda s: s.split( '(', 1 )[ 0 ].strip() )


查看完整回答
反對 回復 2021-09-25
?
烙印99

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

這是一個簡單的解決方案 regex


regex = re.compile(r'.*?(\(.*?\))')

def strip_brackets(x):    

    result = re.findall(regex, x)

    for r in result:

        x = x.replace(r, '')

    return ' '.join(x.split())


df = pandas.DataFrame({'Name' : ['Test Index (UHD)', 'Test Num', 'More (foo) complicated (bar) case']})

df['NewName'] = df['Name'].apply(strip_brackets)

print(df)



                                Name                NewName

0                   Test Index (UHD)             Test Index

1                           Test Num               Test Num

2  More (foo) complicated (bar) case  More complicated case


查看完整回答
反對 回復 2021-09-25
  • 3 回答
  • 0 關注
  • 293 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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