Il est facile de transformer une liste de listes en un cadre de données sur les pandas:
import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])
Mais comment puis-je reconvertir df en liste de listes?
lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]
Vous pouvez accéder au tableau sous-jacent et appeler sa méthode tolist
:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
Si les données contiennent des étiquettes de colonne et d'index que vous souhaitez conserver, vous disposez de quelques options.
Exemple de données:
>>> 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
La méthode tolist()
décrite dans d’autres réponses est utile mais ne fournit que les données de base, ce qui peut ne pas être suffisant, selon vos besoins.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Une solution consiste à convertir la DataFrame
en json à l'aide de df.to_json()
, puis à l'analyser à nouveau. Cela est fastidieux mais présente certains avantages, car la méthode to_json()
offre des options utiles.
>>> 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]]
}
Encombrant mais peut être utile.
La bonne nouvelle est qu'il est assez simple de créer des listes pour les colonnes et les lignes:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
Cela donne:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Si la None
comme nom de l'index vous dérange, renommez-le:
df = df.rename_axis('stage')
Ensuite:
>>> 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]]
Je ne sais pas si cela répondra à vos besoins, mais vous pouvez aussi faire:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
Ceci est juste un tableau numpy du module ndarray, qui vous permet de faire toutes les tâches habituelles du tableau numpy.
Je voulais conserver l'index, j'ai donc adapté la réponse originale à cette solution:
df.reset_index().values.tolist()
Maintenant, pour le recréer ailleurs (par exemple, passer dans une question de débordement de pile):
pd.Dataframe(<data-printed-above>, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Peut-être que quelque chose a changé mais cela a rendu une liste de ndarrays qui a fait ce dont j'avais besoin.
list(df.values)