Respuestas:
Puede acceder a la matriz subyacente y llamar a su tolist
método:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist()
.
Si los datos tienen etiquetas de índice y columna que desea conservar, existen algunas opciones.
Datos de ejemplo:
>>> 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
El tolist()
método descrito en otras respuestas es útil, pero solo proporciona los datos básicos, que pueden no ser suficientes, según sus necesidades.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Un enfoque es convertir el DataFrame
a json usando df.to_json()
y luego analizarlo nuevamente. Esto es engorroso pero tiene algunas ventajas, porque el to_json()
método tiene algunas opciones útiles.
>>> 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]]
}
Es engorroso pero puede resultar útil.
La buena noticia es que es bastante sencillo crear listas para las columnas y filas:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
Esto produce:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Si el None
nombre del índice es molesto, cámbiele el nombre:
df = df.rename_axis('stage')
Luego:
>>> 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()
para todo esto?
No sé si se ajustará a sus necesidades, pero también puede hacer:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
Esta es solo una matriz numpy del módulo ndarray, que le permite hacer todas las cosas habituales de la matriz numpy.
Quería conservar el índice, así que adapté la respuesta original a esta solución:
list_df = df.reset_index().values.tolist()
Ahora puede pegarlo en otro lugar (por ejemplo, para pegarlo en una pregunta de Stack Overflow) y luego volver a crearlo:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Quizás algo cambió, pero esto devolvió una lista de ndarrays que hicieron lo que necesitaba.
list(df.values)
Nota: He visto muchos casos en Stack Overflow en los que convertir una serie Pandas o DataFrame en una matriz NumPy o listas simples de Python es completamente innecesario. Si es nuevo en la biblioteca, considere la posibilidad de verificar dos veces si esos objetos Pandas ya ofrecen la funcionalidad que necesita.
Para citar un comentario de @jpp:
En la práctica , a menudo no es necesario convertir la matriz NumPy en una lista de listas.
Si un DataFrame / Series de Pandas no funciona, puede usar los métodos DataFrame.to_numpy
y incorporados Series.to_numpy
.
for elem in some_series.values.tolist():
porque no saben que puedes iterar sobre los elementos de una serie. No estoy seguro de qué tiene de horrible esta respuesta.
Podemos usar la función DataFrame.iterrows () para iterar sobre cada una de las filas del Dataframe dado y construir una lista a partir de los datos de cada fila:
# 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)
Podemos extraer con éxito cada fila del marco de datos dado en una lista
L
añaden s en la salida?