Pandas如何选择不同大小的代码?

2024-05-23 19:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python3中,对于pandas,我有一个数据帧,在“CPF\u CNPJ\u doador”和“CPF\u CNPJ\u doador\u 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\u CNPJ\u doador”和“CPF\u CNPJ\u doador\u originario”列中的代码始终是整数,大小不同:14位、13位、11位或10位

“CPF\ U CNPJ\ U doador”中的代码示例:125600000131、2056688200164、11459125000109、5746038000121。。。你知道吗

我需要创建一个只有14位和13位代码的数据帧。请问,有人知道我如何在数据框“cand\u doacoes”的“CPF\u CNPJ\u doador”列中只选择14位和13位代码吗?我需要先转换成字符串吗?你知道吗


Tags: csv数据代码pandasobjectnullnonfloat64
3条回答

一种可能的方法是使用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样品测向:

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的数据)

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

相关问题 更多 >