根据不同条件从 Pandas DataFrame 中的列中减去某些部分

我有一个如下所示的 DataFrame:


 id         Name              New_Name

100263   Test Index (UHD)    Test Index

100264   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]

我不认为它应该那么复杂,所以有什么简单的方法可以做到这一点?谢谢


慕婉清6462132
浏览 268回答 3
3回答

当年话下

这是一个用于删除括号下任何内容的单行:df['New_Name'] = df['Name'].str.replace(r"\(.*\)","")输出:>>df id         Name              New_Name100263   Test Index (UHD)    Test Index100264   Test Num             Test Num

慕斯709654

假设您只有一个括号组件,您可以像这样简化调用data[ 'New_Name' ] = data.Name.apply( lambda s: s.split( '(', 1 )[ 0 ].strip() )

烙印99

这是一个简单的解决方案 regexregex = 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                NewName0                   Test Index (UHD)             Test Index1                           Test Num               Test Num2  More (foo) complicated (bar) case  More complicated case
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python