在熊猫中,如何替换列中的某些项目?

时间:2018-11-16 16:51:27

标签: python pandas

在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**'

请,有人知道我该怎么做吗?

3 个答案:

答案 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)