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

Python 如何选择熊猫中不同大小的代码?,python,pandas,Python,Pandas,在Python3中,使用pandas,我在“CPF_CNPJ_doador”和“CPF_CNPJ_doador_originario”列中有一个数据框架,其中包含多个代码 cand_-doacoes=pd.read_-csv(“doacoes_-csv.csv”,sep=';”,encoding='latin_1',decimal=“,”) cand_doacoes.info() 范围索引:427489个条目,0到427488 数据列(共12列): UF 427489非空对象 Partido 4

在Python3中,使用pandas,我在“CPF_CNPJ_doador”和“CPF_CNPJ_doador_originario”列中有一个数据框架,其中包含多个代码

cand_-doacoes=pd.read_-csv(“doacoes_-csv.csv”,sep=';”,encoding='latin_1',decimal=“,”)
cand_doacoes.info()
范围索引:427489个条目,0到427488
数据列(共12列):
UF 427489非空对象
Partido 427489非空对象
货物427489非空对象
Nome_至427489非空对象
CPF_至427489非空int64
CPF_CNPJ_doador 426681非空浮点64
Nome_doador 427489非空对象
Nome_doador_Receita 427489非空对象
Valor 427489非空浮点64
CPF_CNPJ_doador_originario 427489非空对象
Nome_doador_originario 427489非空对象
Nome_doador_originario_Receita 427489非空对象
数据类型:float64(2)、int64(1)、object(9)
内存使用率:39.1+MB
“CPF_CNPJ_doador”和“CPF_CNPJ_doador_originario”列中的代码始终是整数,大小不同:14位、13位、11位或10位

“CPF_CNPJ_doador”中的代码示例:12560000131、2056688000164、11459125000109、5746038000121


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

一种可能的方法是使用
astype(str).str.len()
和isin选择只有13位和14位值的行,即

df = pd.DataFrame({'num':[1256007000131, 20566882000164, 11459125000109, 57,5746038]})

df[df['num'].astype(str).str.len().isin([13,14])]
# Output 
              num
0   1256007000131
1  20566882000164
2  11459125000109

Bharath的borowing样品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

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

np.isin(np.log10(df.code_column.values).astype(int) + 1, [13, 14])
例如(借用Bharath的数据)


无需添加CPF\u CNPJ\u doador的外观。仅仅看到数据类型是不够的。我们需要看看数据谢谢,我在上面举了一些例子
np.isin(np.log10(df.code_column.values).astype(int) + 1, [13, 14])
>>> df[np.isin(np.log10(df.num.values).astype(int) + 1, [13, 14])]
              num
0   1256007000131
1  20566882000164
2  11459125000109