HOWTO · Pandas

Como converter Pandas Dataframe em NumPy Array

Converta um DataFrame do Pandas em um array NumPy com to_numpy(), inclua seu índice ou crie registros estruturados com to_records().

Nesta página

Para obter um array NumPy convencional, use DataFrame.to_numpy(). Em código legado, use a propriedade DataFrame.values; se precisar de campos nomeados, escolha DataFrame.to_records(). Os exemplos usam dados fixos e requerem pandas e NumPy. Um array convencional tem um único dtype, portanto colunas de tipos diferentes podem ser representadas por um dtype comum.

Use DataFrame.to_numpy() para obter um array NumPy

to_numpy() retorna os dados da tabela como um array NumPy bidimensional. As linhas seguem a ordem das linhas do DataFrame, e as colunas seguem a ordem das colunas do DataFrame. A forma do array é (number of rows, number of columns); o índice e os rótulos das colunas do DataFrame não são incluídos. O objeto retornado é um ndarray, que pode ser usado diretamente por funções NumPy subsequentes.

Este exemplo cria uma tabela pequena, converte seus valores e exibe o array, sua forma e o tipo do resultado:

import pandas as pd

df = pd.DataFrame({"name": ["Ada", "Lin"], "score": [91, 88]})
array = df.to_numpy()

print(array)
print(array.shape)
print(type(array))
[['Ada' 91]
 ['Lin' 88]]
(2, 2)
<class 'numpy.ndarray'>

Se precisar de um dtype específico, passe dtype= para to_numpy(), por exemplo, df.to_numpy(dtype="float64"). Isso solicita que o NumPy converta os valores para esse dtype; escolha um que possa representar os valores de todas as colunas. Quando há strings e números misturados, um dtype numérico não consegue representar todos os valores sem conversão, então o dtype comum padrão pode ser object.

Use a propriedade legada DataFrame.values e inclua o índice

DataFrame.values é uma propriedade, por isso deve ser acessada sem parênteses. Ela retorna os dados tabulares como um array, mas to_numpy() deixa a conversão explícita e é a forma recomendada para código novo. O código existente que usa values pode continuar acessando esse atributo.

Para incluir os valores do índice como uma coluna, chame reset_index() antes da conversão. Por padrão, reset_index() coloca o índice antigo na primeira coluna e cria um novo índice inteiro padrão. Renomeie o índice antes se quiser dar um nome significativo à coluna. Consulte reset_index() para ver as opções.

import pandas as pd

df = pd.DataFrame({"score": [91, 88]}, index=["Ada", "Lin"])

legacy_array = df.values
with_index = df.reset_index().to_numpy()

print(legacy_array)
print(with_index)
[[91]
 [88]]
[['Ada' 91]
 ['Lin' 88]]

Como os rótulos do índice são strings e os valores de score são inteiros, o array convencional precisa de um dtype comum e pode usar object. O índice só estará presente após reset_index(); converter o DataFrame original não inclui seus rótulos. Use um array estruturado de registros quando for necessário manter acessíveis os tipos e nomes de cada coluna.

Use DataFrame.to_records() para obter um array NumPy estruturado

to_records() retorna um array NumPy estruturado com um campo nomeado para cada coluna do DataFrame. Por padrão, também inclui o índice em um campo chamado index. O acesso aos campos permite referenciar as colunas pelo nome, e o dtype estruturado registra os tipos individuais de cada uma. Isso é útil quando o código precisa selecionar um campo pelo nome, em vez de depender da posição da coluna.

import pandas as pd

df = pd.DataFrame({"name": ["Ada", "Lin"], "score": [91, 88]})
records = df.to_records()

print(records["name"])
print(records["score"])
print(records.dtype.names)
['Ada' 'Lin']
[91 88]
('index', 'name', 'score')

Defina index=False para omitir o índice ou informe index_dtypes= quando precisar especificar o dtype do campo do índice. Escolha to_numpy() para um array convencional e to_records() quando a tarefa exigir campos nomeados ou informações de dtype por coluna.