Sai come ottenere l'indice o la colonna di un DataFrame come un array NumPy o un elenco Python?
Sai come ottenere l'indice o la colonna di un DataFrame come un array NumPy o un elenco Python?
Risposte:
Per ottenere un array NumPy, è necessario utilizzare l' valuesattributo:
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)
Questo accede al modo in cui i dati sono già memorizzati, quindi non è necessaria una conversione.
Nota: questo attributo è disponibile anche per molti altri oggetti di Panda.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Per ottenere l'indice come elenco, chiama tolist:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
E allo stesso modo, per le colonne.
.valuesè obsoleto, .to_numpy()è la sostituzione suggerita se si desidera un array NumPy. Puoi espanderci su Questo accede al modo in cui i dati sono già memorizzati, quindi non è necessaria una conversione ?
È possibile utilizzare df.indexper accedere all'oggetto indice e quindi ottenere i valori in un elenco utilizzando df.index.tolist(). Allo stesso modo, è possibile utilizzare df['col'].tolist()per la serie.
df.index.values.tolist()
df.index.tolist()non restituisce un metodo di istanza. Restituisce un elenco di indici. È un metodo definito sull'indice panda. Mentre chiamare i valori per primi è una possibilità, delegare il lavoro a numpy non è una correzione, ma solo un'alternativa.
.valuesa favore di questi metodi!Da v0.24.0 in poi, avremo due nuovi metodi preferiti zecca per ottenere matrici NumPy da Index, Seriese DataFrameoggetti: sono to_numpy(), e .array. Per quanto riguarda l'utilizzo, i documenti menzionano:
Non abbiamo rimosso o deprecato
Series.valuesoDataFrame.values, ma consigliamo vivamente e utilizzare.arrayo.to_numpy()invece.
Vedere questa sezione delle note sulla versione v0.24.0 per ulteriori informazioni.
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
Per impostazione predefinita, viene restituita una vista. Qualsiasi modifica apportata influirà sull'originale.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Se invece hai bisogno di una copia, usa to_numpy(copy=True);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Nota che questa funzione funziona anche con DataFrames (mentre .arraynon lo fa).
arrayAttributo
Questo attributo restituisce unExtensionArrayoggetto che supporta l'Indice / Serie.
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
Da qui, è possibile ottenere un elenco utilizzando list:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
oppure chiama direttamente .tolist():
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Per quanto riguarda ciò che viene restituito, i documenti menzionano,
Per
SerieseIndexes sostenuta da normali array NumPy,Series.arrayrestituirà una nuovaarrays.PandasArray, che è un sottile (no-copy) wrapper unanumpy.ndarray.arrays.PandasArraynon è particolarmente utile di per sé, ma fornisce la stessa interfaccia di qualsiasi array di estensione definito in Panda o da una libreria di terze parti.
Quindi, per riassumere, .arraytornerà entrambi
ExtensionArraysupporto esistente dell'Indice / Serie, oExtensionArrayoggetto viene creato come un wrapper sottile sull'array sottostante.Razionale per l'aggiunta di DUE nuovi metodi
Queste funzioni sono state aggiunte a seguito di discussioni in due numeri GitHub GH19954 e GH23623 .
In particolare, i documenti menzionano la logica:
[...] con
.valuesesso non era chiaro se il valore restituito sarebbe l'array effettivo, una sua trasformazione o uno degli array personalizzati di panda (comeCategorical). Ad esempio, conPeriodIndex,.valuesgenerandarrayogni volta un nuovo oggetto period. [...]
Queste due funzioni mirano a migliorare la coerenza dell'API, che rappresenta un passo importante nella giusta direzione.
Infine, .valuesnon sarà deprecato nella versione corrente, ma mi aspetto che ciò accada ad un certo punto in futuro, quindi esorto gli utenti a migrare verso l'API più recente, non appena è possibile.
Da panda v0.13 puoi anche usare get_values:
df.index.get_values()
get_valueschiama e basta .values. Sono più caratteri da digitare.
Ho convertito i panda dataframein liste poi ho usato il basic list.index(). Qualcosa come questo:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Hai il tuo indice come idx.
Di seguito è riportato un modo semplice per convertire la colonna del frame di dati in matrice numpy.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy è una matrice numpy.
Ho provato con to.numpy()ma mi ha dato l'errore di seguito:
TypeError: nessuna conversione supportata per i tipi: (dtype ('O'),) mentre eseguivo la classificazione della rilevanza binaria usando SVC lineare. to.numpy () stava convertendo dataFrame in array numpy ma il tipo di dati dell'elemento interno era elenco a causa del quale è stato osservato l'errore sopra.
to_numpy, però.