在python 3和pandas中,我具有以下数据框:
doacoes_d_2014.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 125082 entries, 1 to 427355
Data columns (total 15 columns):
uf 125082 non-null object
partido_eleicao 125082 non-null object
cargo 125082 non-null object
nome_completo 125082 non-null object
cpf 125082 non-null object
cpf_cnpj_doador 125082 non-null object
nome_doador 125082 non-null object
valor 125082 non-null float64
tipo_receita 125082 non-null object
fonte_recurso 125082 non-null object
especie_recurso 125082 non-null object
descricao 125082 non-null object
cpf_cnpj_doador_originario 125082 non-null object
nome_doador_originario 125082 non-null object
tipo_doador_originario 125082 non-null object
dtypes: float64(1), object(14)
memory usage: 15.3+ MB
“ cpf_cnpj_doador”列具有始终为11位数字的字符串格式的代码。例如:
'18286585291', '31601928220' and '06796478134'
我需要创建一个具有相同“ cpf_cnpj_doador”内容的新列,但将前三位数字替换为*,将后两位数字替换为*。示例:
'***865852**', '***019282**' and '***964781**'
请,有人知道我该怎么做吗?
答案 0 :(得分:4)
您可以使用
df['new']='***'+df['cpf_cnpj_doador'].str[3:9]+'**'
答案 1 :(得分:1)
df["cpf_cnpj_doador"] = df.cpf_cnpj_doador.apply(lambda x: '***'+str(x)[3:9]+'**')
答案 2 :(得分:1)
对于基于正则表达式的方法,您可以执行以下操作:
df['cpf_cnpj_doador'].str.replace(r'^(.{3})(.*?)(.{2})$', '***\\2**', regex=True)