Risposte:
È possibile accedere all'array sottostante e chiamare il suo tolistmetodo:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist() .
Se i dati hanno etichette di colonna e indice che vuoi conservare, ci sono alcune opzioni.
Dati di esempio:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]], \
columns=('first', 'second', 'third'), \
index=('alpha', 'beta'))
>>> df
first second third
alpha 1 2 3
beta 3 4 5
Il tolist()metodo descritto in altre risposte è utile ma fornisce solo i dati principali, che potrebbero non essere sufficienti, a seconda delle esigenze.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Un approccio consiste nel convertire il file DataFramein json utilizzando df.to_json()e quindi analizzarlo di nuovo. Questo è complicato ma presenta alcuni vantaggi, perché il to_json()metodo ha alcune opzioni utili.
>>> df.to_json()
{
"first":{"alpha":1,"beta":3},
"second":{"alpha":2,"beta":4},"third":{"alpha":3,"beta":5}
}
>>> df.to_json(orient='split')
{
"columns":["first","second","third"],
"index":["alpha","beta"],
"data":[[1,2,3],[3,4,5]]
}
Ingombrante ma può essere utile.
La buona notizia è che è abbastanza semplice creare elenchi per le colonne e le righe:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
Questo produce:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Se il Nonenome dell'indice è fastidioso, rinominalo:
df = df.rename_axis('stage')
Poi:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> print(f"columns: {columns}\nrows: {rows}")
columns: ['stage', 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
DataFrame.itertuples()o DataFrame.to_records()per tutto questo?
Non so se soddisferà le tue esigenze, ma puoi anche fare:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
Questo è solo un array numpy dal modulo ndarray, che ti permette di fare tutte le solite cose dell'array numpy.
Volevo preservare l'indice, quindi ho adattato la risposta originale a questa soluzione:
list_df = df.reset_index().values.tolist()
Ora puoi incollarlo da qualche altra parte (ad esempio per incollarlo in una domanda Stack Overflow) e poi ricrearlo:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Forse qualcosa è cambiato, ma questo ha restituito un elenco di ndarrays che hanno fatto ciò di cui avevo bisogno.
list(df.values)
Nota: ho visto molti casi su Stack Overflow in cui la conversione di una serie Pandas o DataFrame in un array NumPy o in semplici elenchi Python non è del tutto necessaria. Se sei nuovo nella libreria, considera di ricontrollare se la funzionalità di cui hai bisogno è già offerta da quegli oggetti Pandas.
Per citare un commento di @jpp:
In pratica , spesso non è necessario convertire l'array NumPy in un elenco di elenchi.
Se un DataFrame / serie di Pandas non funziona, puoi utilizzare i metodi DataFrame.to_numpye incorporati Series.to_numpy.
for elem in some_series.values.tolist():perché non sanno che puoi iterare sugli elementi di una serie. Non sono sicuro di cosa sia così orribile in questa risposta.
Possiamo usare la funzione DataFrame.iterrows () per iterare su ciascuna delle righe del Dataframe dato e costruire un elenco dai dati di ogni riga:
# Empty list
row_list =[]
# Iterate over each row
for index, rows in df.iterrows():
# Create list for the current row
my_list =[rows.Date, rows.Event, rows.Cost]
# append the list to the final list
row_list.append(my_list)
# Print
print(row_list)
Possiamo estrarre con successo ogni riga del data frame dato in un elenco
Lnell'output sono presenti messaggi di posta elettronica?