Réponses:
Vous pouvez accéder au tableau sous-jacent et appeler sa tolist
méthode:
>>> 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 les données ont des étiquettes de colonne et d'index que vous souhaitez conserver, il existe 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 tolist()
méthode décrite dans d'autres réponses est utile mais ne fournit que les données de base - ce qui peut ne pas suffire, selon vos besoins.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Une approche consiste à convertir le DataFrame
en json en utilisant df.to_json()
, puis à l'analyser à nouveau. Ceci est lourd mais présente certains avantages, car la to_json()
méthode comporte 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]]
}
Lourd 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 le None
nom de l'index est gênant, 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]]
DataFrame.itertuples()
ou DataFrame.to_records()
pour tout cela?
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 choses habituelles du tableau numpy.
Je voulais conserver l'index, j'ai donc adapté la réponse originale à cette solution:
list_df = df.reset_index().values.tolist()
Vous pouvez maintenant le coller ailleurs (par exemple pour le coller dans une question de Stack Overflow) et le recréer ultérieurement:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Peut-être que quelque chose a changé mais cela a rendu une liste de ndarrays qui ont fait ce dont j'avais besoin.
list(df.values)
Remarque: j'ai vu de nombreux cas sur Stack Overflow où la conversion d'une série Pandas ou d'un DataFrame en un tableau NumPy ou des listes Python simples est totalement inutile. Si vous êtes nouveau dans la bibliothèque, pensez à vérifier si la fonctionnalité dont vous avez besoin est déjà offerte par ces objets Pandas.
Pour citer un commentaire de @jpp:
En pratique , il n'est souvent pas nécessaire de convertir le tableau NumPy en une liste de listes.
Si un Pandas DataFrame / Series ne fonctionne pas, vous pouvez utiliser les méthodes intégrées DataFrame.to_numpy
et Series.to_numpy
.
for elem in some_series.values.tolist():
parce qu'ils ne savent pas que vous pouvez parcourir les éléments d'une série. Je ne sais pas ce qui est si horrible dans cette réponse.
"df.values" renvoie un tableau numpy. Cela ne préserve pas les types de données. Un entier peut être converti en flottant.
df.iterrows () retourne une série qui ne garantit pas non plus la conservation des types de données. Voir: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html
Le code ci-dessous se convertit en une liste de liste et préserve les types de données:
rows = [list(row) for row in df.itertuples()]
Nous pouvons utiliser la fonction DataFrame.iterrows () pour parcourir chacune des lignes du Dataframe donné et construire une liste à partir des données de chaque ligne:
# 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)
Nous pouvons extraire avec succès chaque ligne de la trame de données donnée dans une liste
L
ajouts dans la sortie?