Sangat mudah untuk mengubah daftar menjadi bingkai data panda:
import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])
Tapi bagaimana cara mengubah df kembali menjadi daftar daftar?
lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]
Sangat mudah untuk mengubah daftar menjadi bingkai data panda:
import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])
Tapi bagaimana cara mengubah df kembali menjadi daftar daftar?
lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]
Jawaban:
Anda dapat mengakses array yang mendasarinya dan memanggil tolistmetodenya:
>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]
df.to_numpy().tolist() .
Jika data memiliki label kolom dan indeks yang ingin Anda pertahankan, ada beberapa opsi.
Contoh data:
>>> 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
The tolist()metode yang dijelaskan dalam jawaban lainnya berguna tetapi hanya menghasilkan data inti - yang mungkin tidak cukup, tergantung pada kebutuhan Anda.
>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]
Salah satu pendekatannya adalah dengan mengonversi DataFramemenjadi json menggunakan df.to_json()dan kemudian menguraikannya lagi. Ini rumit tetapi memiliki beberapa keuntungan, karena to_json()metode ini memiliki beberapa opsi yang berguna.
>>> 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]]
}
Praktis tapi semoga bermanfaat.
Kabar baiknya adalah cukup mudah untuk membuat daftar untuk kolom dan baris:
>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]
Ini menghasilkan:
>>> print(f"columns: {columns}\nrows: {rows}")
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]
Jika Nonesebagai nama indeks mengganggu, ganti namanya:
df = df.rename_axis('stage')
Kemudian:
>>> 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()atau DataFrame.to_records()untuk semua ini?
Saya tidak tahu apakah itu sesuai dengan kebutuhan Anda, tetapi Anda juga dapat melakukan:
>>> lol = df.values
>>> lol
array([[1, 2, 3],
[3, 4, 5]])
Ini hanyalah array numpy dari modul ndarray, yang memungkinkan Anda melakukan semua hal array numpy biasa.
Saya ingin mempertahankan indeks, jadi saya menyesuaikan jawaban asli untuk solusi ini:
list_df = df.reset_index().values.tolist()
Sekarang Anda dapat menempelkannya di tempat lain (misalnya untuk menempelkan ke pertanyaan Stack Overflow) dan kemudian membuatnya kembali:
pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)
Mungkin ada sesuatu yang berubah tetapi ini mengembalikan daftar ndarrays yang melakukan apa yang saya butuhkan.
list(df.values)
Catatan: Saya telah melihat banyak kasus di Stack Overflow di mana mengonversi Seri Pandas atau DataFrame ke array NumPy atau daftar Python biasa sama sekali tidak diperlukan. Jika Anda baru mengenal pustaka, pertimbangkan untuk memeriksa ulang apakah fungsionalitas yang Anda perlukan sudah ditawarkan oleh objek Pandas tersebut.
Mengutip komentar oleh @jpp:
Dalam praktiknya , sering kali tidak perlu mengonversi larik NumPy menjadi daftar daftar.
Jika Pandas DataFrame / Series tidak berfungsi, Anda dapat menggunakan metode DataFrame.to_numpydan bawaan Series.to_numpy.
for elem in some_series.values.tolist():karena mereka tidak tahu bahwa Anda dapat mengulang elemen rangkaian. Saya tidak yakin apa yang mengerikan tentang jawaban ini.
Kita bisa menggunakan fungsi DataFrame.iterrows () untuk mengulangi setiap baris dari Dataframe yang diberikan dan membuat daftar dari data setiap baris:
# 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)
Kami berhasil mengekstrak setiap baris dari bingkai data yang diberikan ke dalam daftar
Lyang ditambahkan dalam output?