Katakanlah saya memiliki kamus dengan 10 pasangan nilai kunci. Setiap entri memiliki larik numpy. Namun, panjang array tidak sama untuk semuanya.
Bagaimana cara membuat kerangka data di mana setiap kolom memiliki entri yang berbeda?
Ketika saya mencoba:
pd.DataFrame(my_dict)
Saya mendapat:
ValueError: arrays must all be the same length
Adakah cara untuk mengatasinya? Saya senang Panda digunakan NaN
untuk mengisi kolom-kolom itu untuk entri yang lebih pendek.
pd.Series(...)
(dengan asumsiimport pandas as pd
di bagian impor)pd.DataFrame({k: pd.Series(l) for k, l in d.items()})
Berikut cara sederhana untuk melakukannya:
sumber
columns
tapi ini sudah default. Lihat dokumentasi pandas - pandas.DataFrame.from_dictCara untuk merapikan sintaks Anda, tetapi pada dasarnya masih melakukan hal yang sama seperti jawaban lainnya, ada di bawah ini:
Sintaks serupa juga ada untuk daftar:
Sintaks lain untuk daftar adalah:
Anda juga mungkin harus mengubah hasil dan / atau mengubah tipe data kolom (float, integer, dll).
sumber
Padahal ini tidak langsung menjawab pertanyaan OP. Saya menemukan ini menjadi solusi yang sangat baik untuk kasus saya ketika saya memiliki array yang tidak sama dan saya ingin berbagi:
dari dokumentasi panda
sumber
Anda juga dapat menggunakan
pd.concat
bersamaaxis=1
dengan daftarpd.Series
objek:sumber
Kedua baris berikut bekerja dengan sempurna:
Tetapi dengan% timeit di Jupyter, saya memiliki rasio kecepatan 4x untuk B vs A, yang cukup mengesankan terutama saat bekerja dengan kumpulan data yang besar (terutama dengan sejumlah besar kolom / fitur).
sumber
Jika Anda tidak ingin menampilkannya
NaN
dan Anda memiliki dua panjang tertentu, menambahkan 'spasi' di setiap sel yang tersisa juga akan berfungsi.Jika Anda memiliki lebih dari 2 panjang entri, disarankan untuk membuat fungsi yang menggunakan metode serupa.
sumber
pd.DataFrame ([my_dict]) bisa!
sumber