Saya punya daftar kamus seperti ini:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
Dan saya ingin mengubah ini menjadi panda DataFrame
seperti ini:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Catatan: Urutan kolom tidak masalah.
Bagaimana saya bisa mengubah daftar kamus menjadi panda DataFrame seperti yang ditunjukkan di atas?
python
dictionary
pandas
dataframe
appleLover
sumber
sumber
df = df.set_index('time')
sesudahnyapandas.DataFrame
'{"":{"...
Harap diingat bahwa untuk kamus bersarang Anda menggunakan pendekatan json_normalize, lihat jawaban terperinci dari @ cs95Jawaban lainnya benar, tetapi tidak banyak yang dijelaskan dalam hal kelebihan dan keterbatasan metode ini. Tujuan dari posting ini adalah untuk menunjukkan contoh-contoh metode ini dalam situasi yang berbeda, mendiskusikan kapan harus menggunakan (dan kapan tidak menggunakan), dan menyarankan alternatif.
DataFrame()
,,DataFrame.from_records()
dan.from_dict()
Bergantung pada struktur dan format data Anda, ada situasi di mana ketiga metode bekerja, atau beberapa bekerja lebih baik daripada yang lain, atau beberapa tidak berfungsi sama sekali.
Pertimbangkan contoh yang sangat dibuat-buat.
Daftar ini terdiri dari "catatan" dengan setiap kunci hadir. Ini adalah kasus paling sederhana yang bisa Anda temui.
Kata pada Orientasi Kamus:
orient='index'
/'columns'
Sebelum melanjutkan, penting untuk membuat perbedaan antara berbagai jenis orientasi kamus, dan dukungan dengan panda. Ada dua tipe utama: "kolom", dan "indeks".
orient='columns'
Kamus dengan orientasi "kolom" akan memiliki kunci sesuai dengan kolom dalam DataFrame yang setara.
Sebagai contoh, di
data
atas adalah dalam orientasi "kolom".Catatan: Jika Anda menggunakan
pd.DataFrame.from_records
, orientasi diasumsikan "kolom" (Anda tidak dapat menentukan sebaliknya), dan kamus akan dimuat sesuai.orient='index'
Dengan orientasi ini, kunci diasumsikan sesuai dengan nilai indeks. Jenis data ini paling cocok untuk
pd.DataFrame.from_dict
.Kasus ini tidak dipertimbangkan dalam OP, tetapi masih berguna untuk diketahui.
Pengaturan Indeks Kustom
Jika Anda memerlukan indeks khusus pada DataFrame yang dihasilkan, Anda dapat mengaturnya menggunakan
index=...
argumen.Ini tidak didukung oleh
pd.DataFrame.from_dict
.Berurusan dengan Tombol / Kolom yang Hilang
Semua metode bekerja di luar kotak saat menangani kamus dengan nilai kunci / kolom yang hilang. Sebagai contoh,
Membaca Subset Kolom
"Bagaimana jika saya tidak ingin membaca di setiap kolom"? Anda dapat dengan mudah menentukan ini menggunakan
columns=...
parameter.Misalnya, dari kamus contoh di
data2
atas, jika Anda hanya ingin membaca kolom "A ',' D ', dan' F ', Anda dapat melakukannya dengan melewati daftar:Ini tidak didukung oleh
pd.DataFrame.from_dict
dengan "kolom" orientasi default.Membaca Subset Baris
Tidak didukung oleh metode ini secara langsung . Anda harus beralih pada data Anda dan melakukan penghapusan terbalik di tempat saat Anda mengulanginya. Misalnya, untuk mengekstrak hanya 0 th dan 2 nd baris dari
data2
atas, Anda dapat menggunakan:The Panacea:
json_normalize
for Nested DataAlternatif yang kuat dan kuat untuk metode yang diuraikan di atas adalah
json_normalize
fungsi yang bekerja dengan daftar kamus (catatan), dan selain itu juga dapat menangani kamus bersarang.Sekali lagi, perlu diingat bahwa data yang diteruskan
json_normalize
harus dalam format daftar (kamus).Seperti disebutkan,
json_normalize
juga dapat menangani kamus bersarang. Berikut ini contoh yang diambil dari dokumentasi.Untuk informasi lebih lanjut tentang argumen
meta
danrecord_path
, periksa dokumentasi.Meringkas
Berikut adalah tabel dari semua metode yang dibahas di atas, bersama dengan fitur / fungsi yang didukung.
* Gunakan
orient='columns'
dan kemudian transpos untuk mendapatkan efek yang sama denganorient='index'
.sumber
Dalam panda 16.2, saya harus melakukan
pd.DataFrame.from_records(d)
ini agar berhasil.sumber
deque
0.17.1
dengan solusi @ joris0.18.1
, seseorang harus menggunakanfrom_records
kamus jika tidak semua memiliki kunci yang sama.Anda juga dapat menggunakan
pd.DataFrame.from_dict(d)
sebagai:sumber
dict
s, bukan dari satudict
seperti yang Anda diasumsikan dalam jawaban Anda.Saya tahu beberapa orang akan menemukan ini dan tidak menemukan apa pun di sini yang membantu. Cara termudah yang saya temukan untuk melakukannya adalah seperti ini:
Semoga ini bisa membantu seseorang!
sumber
dan panggilan sederhana:
sumber
sumber
Untuk mengonversi daftar kamus ke panda DataFrame, Anda dapat menggunakan "append":
Kami memiliki kamus yang disebut
dic
dan dic memiliki 30 daftar item (list1
,list2
, ...,list30
)total_df
)total_df
denganlist1
total_df
sumber
DataFrame()
,DataFrame.from_records()
dan.from_dict()
?