在熊猫中如何将符号转换为整数?
Posted
技术标签:
【中文标题】在熊猫中如何将符号转换为整数?【英文标题】:In pandas how to convert notation to a whole number? 【发布时间】:2020-06-02 12:03:58 【问题描述】:在 python3 和 pandas 中,我打开一个像这样的 CSV:
import pandas as pd
kwargs = 'sep': ';', 'dtype': str, 'encoding': 'utf-8'
df = pd.read_csv("COVID_sp_29_mai_2020.csv", **kwargs)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7119 entries, 0 to 7118
Data columns (total 27 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Secretaria 7119 non-null object
1 Assunto 7119 non-null object
2 13979 7119 non-null object
3 Valor de Empenho no Processo 7119 non-null object
4 Órgão 7119 non-null object
5 Código UG Documento 7119 non-null object
6 Descrição Processo 7119 non-null object
7 Finalidade 7119 non-null object
8 R$ Empenho 7119 non-null object
9 Tipo Documento 7119 non-null object
10 Data Atualização 7119 non-null object
11 R$ Pago 7119 non-null object
12 Número Empenho 7119 non-null object
13 Número Documento NE Ref / Anul 335 non-null object
14 Número Processo 7119 non-null object
15 CGC CPF 7026 non-null object
16 Nome Credor 7119 non-null object
17 Data Emissão 7119 non-null object
18 Ação Orçamentária 7119 non-null object
19 Fonte 7119 non-null object
20 Código Fonte 7119 non-null object
21 Descrição 7119 non-null object
22 Unnamed: 22 0 non-null object
23 Unnamed: 23 0 non-null object
24 Unnamed: 24 0 non-null object
25 Unnamed: 25 16 non-null object
26 Unnamed: 26 17 non-null object
dtypes: object(27)
memory usage: 1.5+ MB
列有'CGC CPF'有识别码,有时只能有数字或数字和字母
识别代码'CGC CPF'只有数字的行被文件注释。示例:
Educação;Merenda em Casa;regular;81.508.955,00 ;SECRETARIA DA EDUCACAO;80358;MERENDA EM CASA;MERENDA EM CASA;-40280955;NE;29/05/2020;0;2020NE00119;2020NE00120;20407/20;2,29E+13;PICPAY SERVICOS S/A;01/04/2020;FORNEC. ALIMENTACAO P/ALUNOS EDUCACAO BASICA;Federal;5003002;DISPENSA DE LICITACAO;;;;Data Atualização;Data Atualização
在这种情况下,该行的代码是 CSV 中的“2,29E+13”。这是公司代码,我知道是“22896431000110”
请问,如何将列符号转换为整数?
我想将指数符号值转换为 int。另外,我会检查 CSV 值是否正确
【问题讨论】:
如果你得到的CSV是这样的,你无法恢复到原来的值,这是CSV导出方式的错误。另一方面,如果您的意思是 CSV 中的值是正确的,并且当您读取它时,您会得到指数符号,您可以将其读取为字符串,如果您需要它作为整数,可以将其转换为int
跨度>
非常感谢@ChatterOne 我想将指数符号值转换为int。此外,我将检查 CSV 值是否正确
【参考方案1】:
试试这个 -
df['CGC CPF'].fillna('UNK', inplace=True)
df.loc[:, 'CGC CPF'] = df.loc[:, 'CGC CPF'].str.replace(',','') #replacing ',' in target column with blank, for us to interpret exponential values
match = ['E+','e+'] #Since there are both e+ and E+ notation
df['CGC CPF'] = df['CGC CPF'].apply(lambda x: float(x) if any(m in x for m in match) else x) #using float to convert exponential to a number
【讨论】:
非常感谢@Rohitupadhyay 但它仍然是“2,29E+13” 再次感谢@Rohitupadhyay 我遇到了这个错误(TypeError:'float' 类型的参数不可迭代)。帮助的 CSV 链接 - drive.google.com/file/d/1spLwZAwEjlWgaFZ4MS652TWcw7l8fsom/… 请查看更新后的答案,“CGC CPF”列中的 Null 导致了错误。用 UNK 替换 Null。 我的错,所以数据集中既有 e+ 也有 E+,请使用更新后的答案。我检查了你分享的数据,它工作正常。 这不可能。数字22896431000110
和22896431000000
都将表示为2,29E+13
,并且无法取回原始数字:信息丢失。这将始终为您提供22900000000000
(甚至不是 2289...),这就是我所说的问题在于输入数据(CSV)的方式。以上是关于在熊猫中如何将符号转换为整数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 x86(32 位)程序集中将无符号整数转换为浮点数?