我有一个名为 df 的数据框,看起来像这样:
Connection con=DriverManager.getConnection("jdbc:derby:myDB","username","password");
我正在尝试将column1中的短语“ #name ”替换为column2的值。我希望最终结果看起来像这样:
我尝试了以下几种方法:
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的值。任何有关如何解决此问题的建议将不胜感激!
答案 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.replace
和iter
:
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