在熊猫中如何将符号转换为整数?

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+,请使用更新后的答案。我检查了你分享的数据,它工作正常。 这不可能。数字2289643100011022896431000000 都将表示为2,29E+13,并且无法取回原始数字:信息丢失。这将始终为您提供22900000000000(甚至不是 2289...),这就是我所说的问题在于输入数据(CSV)的方式。

以上是关于在熊猫中如何将符号转换为整数?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫字符串按字符转换为整数

如何在 x86(32 位)程序集中将无符号整数转换为浮点数?

如何将多索引列转换为熊猫数据框的单索引列?

Python:如何将 32 位有符号长整数转换为 7 位整数

熊猫将带有年份整数的列转换为日期时间

如何将以“\ 0”开头的char *转换为无符号整数? [关闭]