其实这是一个困扰自己已久的问题了,就是调用replace()方法时,明明没有报错,但是却没办法替换成功
源数据:
import pandas as pd
df = pd.DataFrame(
{
'名称':['<a>产品1','<a>产品2','<a>产品3'],
'数量':['A','0.7','0.8'],
'金额':['0','0.48','0.33'],
'合计':['D','0.37','0.2'],
}
)
df.head(20)
输出:
名称 数量 金额 合计
0 <a>产品1 A 0 D
1 <a>产品2 0.7 0.48 0.37
2 <a>产品3 0.8 0.33 0.2
想把前面多余的‘<a>’给去掉,但是执行代码之后却没有任何改变:
df1=df.copy() #备份
df1['名称']=df['名称'].replace('<a>','') #replace函数需要重新赋值才是真正生效,不然的话要加个inplace=True
df1.head(20)
输出:
名称 数量 金额 合计
0 <a>产品1 A 0 D
1 <a>产品2 0.7 0.48 0.37
2 <a>产品3 0.8 0.33 0.2
一模一样,完全没有改变
后来研究了很久,发现原来【不能直接调用replace(),需要转为字符串,才可以对元素的部分内容进行修改】
df2=df.copy()
df2['金额']=df['金额'].str.replace('<a>','') #加上.str,就会当作是对单一字符串进行操作,实现修改其中部分内容的目的
df2.head(20)
输出:
名称 数量 金额 合计
0 产品1 A 0 D
1 产品2 0.7 0.48 0.37
2 产品3 0.8 0.33 0.2
修改成功了
原因是直接调用replace()是替换整个元素,要对某个元素的部分进行修改,就必须转成字符串,来实现字符串部分替换