如何在熊猫中选择不同大小的代码?

时间:2017-11-22 17:21:20

标签: python pandas

在Python 3中,使用pandas,我在“CPF_CNPJ_doador”和“CPF_CNPJ_doador_originario”列中有几个代码的数据框

cand_doacoes = pd.read_csv("doacoes_csv.csv",sep=';',encoding = 'latin_1',  decimal = ",")

cand_doacoes.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 427489 entries, 0 to 427488
Data columns (total 12 columns):
UF                                427489 non-null object
Partido                           427489 non-null object
Cargo                             427489 non-null object
Nome_candidato                    427489 non-null object
CPF_candidato                     427489 non-null int64
CPF_CNPJ_doador                   426681 non-null float64
Nome_doador                       427489 non-null object
Nome_doador_Receita               427489 non-null object
Valor                             427489 non-null float64
CPF_CNPJ_doador_originario        427489 non-null object
Nome_doador_originario            427489 non-null object
Nome_doador_originario_Receita    427489 non-null object
dtypes: float64(2), int64(1), object(9)
memory usage: 39.1+ MB

“CPF_CNPJ_doador”和“CPF_CNPJ_doador_originario”列中的代码始终为整数且大小不同:14位,13位,11位或10位

“CPF_CNPJ_doador”中的代码示例:1256007000131,20566882000164,11459125000109,5746038000121 ...

我需要创建一个只有14位和13位代码的数据帧。请问,有没有人知道我如何只选择数据框“cand_doacoes”中“CPF_CNPJ_doador”列中的14位和13位代码?我需要先转换为字符串吗?

3 个答案:

答案 0 :(得分:3)

如果你真的有代码的整数,那么应该快速的一种数学方法是将代码的基数10日志作为整数类型,并加1来计算数字位数。这可以是你的面具。

np.isin(np.log10(df.code_column.values).astype(int) + 1, [13, 14])

例如(借用Bharath的数据),

>>> df[np.isin(np.log10(df.num.values).astype(int) + 1, [13, 14])]
              num
0   1256007000131
1  20566882000164
2  11459125000109

答案 1 :(得分:2)

使用while和isin选择只有13位和14位数字的行的一种可能方式,即

astype(str).str.len()

答案 2 :(得分:2)

借用@Bharath的样本DF:

In [114]: df['num'].astype(str).str.match(r'\d{13,14}')
Out[114]:
0     True
1     True
2     True
3    False
4    False
Name: num, dtype: bool

In [115]: df[df['num'].astype(str).str.match(r'\d{13,14}')]
Out[115]:
              num
0   1256007000131
1  20566882000164
2  11459125000109