Você sabe como obter o índice ou a coluna de um DataFrame como uma matriz NumPy ou lista python?
Você sabe como obter o índice ou a coluna de um DataFrame como uma matriz NumPy ou lista python?
Respostas:
Para obter uma matriz NumPy, você deve usar o values
atributo:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
Isso acessa como os dados já estão armazenados, portanto, não há necessidade de conversão.
Nota: Este atributo também está disponível para muitos outros objetos dos pandas.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Para obter o índice como uma lista, ligue para tolist
:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
E da mesma forma, para colunas.
.values
está obsoleta, .to_numpy()
é a substituição sugerida se você deseja uma matriz NumPy. Você pode expandir Isso acessa como os dados já estão armazenados, para que não haja necessidade de conversão ?
Você pode usar df.index
para acessar o objeto de índice e obter os valores em uma lista usando df.index.tolist()
. Da mesma forma, você pode usar o df['col'].tolist()
Series.
df.index.values.tolist()
df.index.tolist()
não retorna um método de instância. Retorna uma lista de índices. É um método definido no índice de pandas. Embora chamar valores seja uma possibilidade, delegar o trabalho a numpy não é uma correção - apenas uma alternativa.
.values
em favor desses métodos!De v0.24.0 em diante, teremos dois métodos marca muito novo, preferidos para a obtenção de matrizes Numpy partir Index
, Series
e DataFrame
objetos: eles são to_numpy()
, e .array
. Em relação ao uso, os documentos mencionam:
Não removemos ou descontinuamos
Series.values
ouDataFrame.values
, mas é altamente recomendável usar.array
ou.to_numpy()
não.
Consulte esta seção das notas da versão v0.24.0 para obter mais informações.
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
Por padrão, uma exibição é retornada. Quaisquer modificações feitas afetarão o original.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Se você precisar de uma cópia, use to_numpy(copy=True
);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Observe que essa função também funciona para DataFrames (enquanto .array
não).
array
Atributo
Este atributo retorna umExtensionArray
objeto que faz backup do Índice / Série.
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
A partir daqui, é possível obter uma lista usando list
:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
ou ligue diretamente para .tolist()
:
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Em relação ao que é retornado, os documentos mencionam,
Para
Series
eIndex
es suportados por matrizes NumPy normais,Series.array
retornará um novoarrays.PandasArray
, que é um invólucro fino (sem cópia) em torno de anumpy.ndarray
.arrays.PandasArray
não é especialmente útil por si só, mas fornece a mesma interface que qualquer matriz de extensão definida em pandas ou por uma biblioteca de terceiros.
Então, para resumir, .array
retornará
ExtensionArray
suporte existente ao Index / Series, ouExtensionArray
objeto será criado como um invólucro fino sobre a matriz subjacente.Justificativa para adicionar DOIS novos métodos
Essas funções foram adicionadas como resultado de discussões em dois problemas do GitHub, GH19954 e GH23623 .
Especificamente, os documentos mencionam a lógica:
[...] com
.values
isso não ficou claro se o valor retornado seria a matriz real, alguma transformação dela ou uma das matrizes personalizadas do pandas (comoCategorical
). Por exemplo, comPeriodIndex
,.values
gera um novondarray
objeto de ponto a cada vez. [...]
Essas duas funções visam melhorar a consistência da API, que é um passo importante na direção certa.
Por fim, .values
não será descontinuado na versão atual, mas espero que isso aconteça em algum momento no futuro, por isso, exortaria os usuários a migrarem para a API mais recente o mais rápido possível.
Se você estiver lidando com um quadro de dados com vários índices, poderá estar interessado em extrair apenas a coluna de um nome do multi-índice. Você pode fazer isso como
df.index.get_level_values('name_sub_index')
e, claro, name_sub_index
deve ser um elemento doFrozenList
df.index.names
Desde o pandas v0.13, você também pode usar get_values
:
df.index.get_values()
get_values
apenas liga .values
. São mais caracteres para digitar.
Eu converti os pandas dataframe
para list
e depois usei o básico list.index()
. Algo assim:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Você tem seu valor de índice como idx
.
Uma maneira mais recente de fazer isso é usar a função .to_numpy ().
Se eu tiver um quadro de dados com uma coluna 'preço', posso convertê-lo da seguinte maneira:
priceArray = df['price'].to_numpy()
Você também pode passar o tipo de dados, como float ou objeto, como argumento da função
Abaixo está uma maneira simples de converter a coluna do quadro de dados em uma matriz numpy.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy é uma matriz numpy.
Eu tentei com, to.numpy()
mas ele me deu o erro abaixo:
TypeError: nenhuma conversão suportada para tipos: (dtype ('O'),) enquanto fazia a classificação de classificação de relevância binária usando o Linear SVC. to.numpy () estava convertendo o dataFrame em uma matriz numpy, mas o tipo de dados do elemento interno estava listado, pelo que o erro acima foi observado.
to_numpy
, no entanto.