为了账号安全,请及时绑定邮箱和手机立即绑定

根据不同条件从 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 关注
  • 249 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信