用熊猫的另一列中的相应字符串替换字符串

时间:2019-01-11 17:12:31

标签: python string pandas dataframe replace

我有一个名为 df 的数据框,看起来像这样:

Connection con=DriverManager.getConnection("jdbc:derby:myDB","username","password");

我正在尝试将column1中的短语“ #name ”替换为column2的值。我希望最终结果看起来像这样:

enter image description here

我尝试了以下几种方法:

pd.DataFrame({
    'column1' : ['client#1 is #name#', 'client#2 is #name#'], 
    'column2': ['josh', 'max']}
)

              column1 column2
0  client#1 is #name#    josh
1  client#2 is #name#     max

但是我不确定如何在column1中获取特定短语' #name#'并将其替换为column2的值。任何有关如何解决此问题的建议将不胜感激!

1 个答案:

答案 0 :(得分:2)

如果是字符串,并且没有NaN,我建议在列表理解内调用str.replace以获得速度:

df['column1'] = [
    x.replace('#name#', y) for x, y in zip(df.column1, df.column2)]

df
            column1 column2
0  client#1 is josh    josh
1   client#2 is max     max

为什么列表理解对于字符串操作值得?您可以在For loops with pandas - When should I care?上阅读更多内容。


您可以考虑的另一个有趣的选择是str.replaceiter

it = iter(df.column2)
df['column1'] = df.column1.str.replace('#name#', lambda x: next(it))

df
            column1 column2
0  client#1 is josh    josh
1   client#2 is max     max

应该能够很好地处理NaN和混合dtype(但会更慢)。


@Vaishali提供的一个更简单的replace选项,如果“#name#”子字符串始终位于字符串的末尾,则该选项将起作用。

df['column1'] = df.column1.add(df.column2).str.replace('#name#', '')
df
            column1 column2
0  client#1 is josh    josh
1   client#2 is max     max