Change column type in pandas (Português)

you have four main options for converting types in pandas:

Read on for more detailed explanations and usage of each of these methods.

A melhor maneira de converter uma ou mais colunas de uma DataFrame para valores numéricos é usar pandas.to_numeric().

Esta função irá tentar mudar objectos não-numéricos (como cadeias de caracteres) para números inteiros ou de vírgula flutuante, conforme apropriado.

uso básico

a entrada para to_numeric() é uma série ou uma única coluna de um DataFrame.,

Como pode ver, uma nova série é devolvida. Lembre-se atribuir este resultado a uma variável ou coluna nome para continuar usando-o:

# convert Seriesmy_series = pd.to_numeric(my_series)# convert column "a" of a DataFramedf = pd.to_numeric(df)

Você também pode usá-lo para converter várias colunas de uma DataFrame através de apply() método:

desde que os seus valores podem ser convertidos, que provavelmente é tudo o que você precisa.

tratamento de erros

mas e se alguns valores não puderem ser convertidos para um tipo numérico?,

to_numeric() também leva um errors palavras-chave argumento que permite forçar valores não-numéricos para ser NaN, ou simplesmente ignorar colunas contendo esses valores.

aqui está um exemplo usando uma série de strings s que tem o objeto dtype:

>>> s = pd.Series()>>> s0 11 22 4.73 pandas4 10dtype: object

o comportamento padrão é aumentar se ele não pode converter um valor., Neste caso, ele não pode lidar com a cadeia ‘pandas’:

>>> pd.to_numeric(s) # or pd.to_numeric(s, errors='raise')ValueError: Unable to parse string

ao invés de falhar, nós podemos querer ‘pandas’ para ser considerado um valor numérico faltante/ruim., Podemos utilizar valores inválidos para NaN da seguinte forma usando o errors argumento de palavra-chave:

>>> pd.to_numeric(s, errors='coerce')0 1.01 2.02 4.73 NaN4 10.0dtype: float64

a terceira opção para A errors é apenas para ignorar a operação se um valor inválido for encontrado:

>>> pd.to_numeric(s, errors='ignore')# the original Series is returned untouched

Esta última opção é particularmente útil quando você deseja converter toda sua DataFrame, mas não sabe qual das nossas colunas podem ser convertidos de forma confiável para um tipo numérico., Nesse caso, basta escrever:

df.apply(pd.to_numeric, errors='ignore')

a função será aplicada a cada coluna do DataFrame. As colunas que podem ser convertidas para um tipo numérico serão convertidas, enquanto as colunas que não podem (por exemplo, elas contêm strings ou datas não-digitalizadas) serão deixadas sozinhas.

Downcasting

Por padrão, a conversão com to_numeric() vai dar-lhe um int64 ou float64 dtype (ou qualquer número inteiro largura é nativo para a plataforma).,

normalmente é o que você quer, mas e se você quiser salvar alguma memória e usar um dtype mais compacto, como float32, ou int8?

>>> s = pd.Series()>>> s0 11 22 -7dtype: int64

Downcasting ‘inteiro’ utiliza o menor número inteiro que pode conter os valores:

>>> pd.to_numeric(s, downcast='integer')0 11 22 -7dtype: int8

Downcasting a ‘flutuar’ da mesma forma picaretas menor do que o normal tipo de flutuação:

>>> pd.to_numeric(s, downcast='float')0 1.01 2.02 -7.0dtype: float32

astype()

astype() método permite que você seja explícito sobre o dtype você deseja que sua DataFrame ou Série a ter., É muito versátil em que você pode tentar e ir de um tipo para o outro.

uso Básico

Chamar o método no objeto que você deseja converter e astype() vou tentar convertê-lo para você:

Repare que eu disse “tentar” – se astype() não sabe como converter um valor em Série ou DataFrame, ele irá gerar um erro. Por exemplo, se tiver um valor

ouinfirá obter um erro ao tentar convertê-lo para um inteiro.

em pandas 0.20.,0, this error can be suppressed by passing errors='ignore'. O seu objecto original voltará intacto.

tenha cuidado

astype() é poderoso, mas às vezes irá converter valores”incorretamente”. Por exemplo:

>>> s = pd.Series()>>> s0 11 22 -7dtype: int64

estes são inteiros pequenos, então que tal converter para um tipo de 8 bits sem sinal para salvar a memória?

>>> s.astype(np.uint8)0 11 22 249dtype: uint8

a conversão funcionou, mas o -7 foi enrolado para se tornar 249 (ou seja, 28 – 7)!

tentar rebaixar usando pd.to_numeric(s, downcast='unsigned') em vez disso poderia ajudar a prevenir este erro.,

infer_objects ()

Version 0.21.0 of pandas introduced the methodinfer_objects() for converting columns of a DataFrame that have an object datatype to a more specific type (soft conversions).

por exemplo, aqui está um DataFrame com duas colunas de tipo de objeto. Um titular de reais, inteiros e o outro contém cadeias de caracteres que representam números inteiros:

>>> df = pd.DataFrame({'a': , 'b': }, dtype='object')>>> df.dtypesa objectb objectdtype: object

Usando a tag infer_objects(), você pode alterar o tipo de coluna ‘a’ para int64:

>>> df = df.infer_objects()>>> df.dtypesa int64b objectdtype: object

a Coluna ‘b’ foi deixado sozinho, pois seus valores foram cadeias, não inteiros., Se quiser tentar forçar a conversão de ambas as colunas para um tipo inteiro, poderá usar df.astype(int) em alternativa.

convert_dtypes()

a Versão 1.0 e acima inclui um método convert_dtypes() converter-se em Série e em DataFrame colunas da melhor forma possível, dtype que suporta o pd.NA valor em falta.

aqui “o melhor possível” significa o tipo mais adequado para manter os valores., Por exemplo, este é um pandas tipo inteiro se todos os valores são números inteiros (ou valores em falta): uma coluna de objeto do Python inteiro objetos é convertido para Int64, uma coluna de NumPy int32 valores vão se tornar os pandas dtype Int32.,

Com os nossos object DataFrame df, obtemos o seguinte resultado:

>>> df.convert_dtypes().dtypes a Int64b stringdtype: object

Desde a coluna ‘a’, realizada valores de número inteiro, ele foi convertido para o Int64 tipo (que é capaz de manter os valores em falta, ao contrário de int64).

Column ‘ B ‘contained string objects, so was changed to pandas’ string dtype.

Por padrão, este método irá inferir o tipo a partir dos valores dos objetos em cada coluna., Nós podemos mudar isso passando infer_objects=False:

>>> df.convert_dtypes(infer_objects=False).dtypes a objectb stringdtype: object

Agora, a coluna ‘um’ manteve-se uma coluna de objeto: os pandas sabe que ele pode ser descrito como um ‘inteiro’ coluna (internamente ele executou infer_dtype), mas não inferir exatamente o que dtype de número inteiro que deve ter para não convertê-lo. A coluna ” b “foi novamente convertida para “string” dtype, uma vez que foi reconhecida como segurando os valores “string”.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *