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

时间:2018-12-25 09:31:20

标签: python pandas

我有一个如下所示的DataFrame:

read_parquet

如您所见,当我的 id Name New_Name 100263 Test Index (UHD) Test Index 100264 Test Num Test Num 列中的值包含Name时,我只想此字符串的左侧,例如:(-> {{1} };但是,如果字符串不包含Test Index (UHD),则需要整个字符串,例如:Test Index-> (

我有一个想法,我可以遍历此列中的所有值以进行更改,例如,对于第一个值,我的想法是

Test Num

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

3 个答案:

答案 0 :(得分:3)

假设您只有一个括号组件,您可以像这样简化调用

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

答案 1 :(得分:2)

这是一个简单的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

答案 2 :(得分:2)

这里是一个衬里,用于删除括号内的所有内容:

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

输出:

>>df

 id         Name              New_Name
100263   Test Index (UHD)    Test Index
100264   Test Num             Test Num