我想使用其他列中的值替换数据框中的部分列值

时间:2019-08-08 20:27:38

标签: python pandas dataframe replace

我有一列,该列的一部分将被另一列的值替换。 例如,我想从此开始:

<table style="width:100%" border="1">
  <tr>
    <th>Reference</th>
    <th>Identification\Customer</th> 
    <th>Target Customer</th>
  </tr>
  <tr>
    <td>CustomerA\BFG\CustomerA-CCP\CustomerA-CSA</td>
    <td>CustomerA</td> 
    <td>CustomerB</td>
  </tr>
</table>

对此

<table style="width:100%" border="1">
  <tr>
    <th>Reference
</th>
    <th>Identification\Customer</th> 
    <th>Target Customer</th>
  </tr>
  <tr>
    <td>Customer<a style="color:red;">B</a>\BFG\CustomerA-CCP\CustomerA-CSA</td>
    <td>CustomerA</td> 
    <td>CustomerB</td>
  </tr>
</table>

我只希望将CustomerA的初始值更改为CustomerB。其余值应保持不变。

我认为这应该可行,但我在列中全都输入了

data = [['CustomerA\\BFG\\CustomerA-CCP\\CustomerA-Agreement',  'CustomerA',    'CustomerB'],['CustomerC\\BFG\\CustomerC-CCP\\CustomerC-Agreement', 'CustomerC',    'CustomerD']] 

customerCollateral = pd.DataFrame(data, columns = ['Reference', 'Identification\\Customer','Identification\\Parent']) 

customerCollateral['Reference2']=customerCollateral.apply(lambda x:x['Reference'].replace(x['Identification\\Customer'],x['Identification\\Parent'],n=1),axis=1)

print(customerCollateral)

但是,当我执行上述操作时,出现此错误。 TypeError :(“ replace()不带关键字参数”,“发生在索引0”)

如果我不使用n = 1,则将CustomerA的所有值替换为CustomerB。

2 个答案:

答案 0 :(得分:0)

x['Reference']是有问题的对象,因为x是一个Series,并且已经按名称查询过。用replace(...)调用的对象是str

但是,str.replace没有关键字n。请参阅此处的文档,限制由第三个参数而不是关键字参数定义:https://docs.python.org/3/library/stdtypes.html#str.replace

答案 1 :(得分:0)

customerCollateral['Reference'] = customerCollateral['Identification\Parent'].str.cat(customerCollateral['Reference'].str.extract(r"(\\.*)"))

只需以正确的顺序连接所需的字符串即可。我提取了我们想要的参考列部分,并添加了id / parent列。