Saya memiliki kamus Python seperti berikut:
{u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
u'2012-06-13': 389,
u'2012-06-14': 389,
u'2012-06-15': 389,
u'2012-06-16': 389,
u'2012-06-17': 389,
u'2012-06-18': 390,
u'2012-06-19': 390,
u'2012-06-20': 390,
u'2012-06-21': 390,
u'2012-06-22': 390,
u'2012-06-23': 390,
u'2012-06-24': 390,
u'2012-06-25': 391,
u'2012-06-26': 391,
u'2012-06-27': 391,
u'2012-06-28': 391,
u'2012-06-29': 391,
u'2012-06-30': 391,
u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
Kuncinya adalah tanggal Unicode dan nilainya adalah bilangan bulat. Saya ingin mengonversinya menjadi panda dataframe dengan memiliki tanggal dan nilainya sesuai dengan dua kolom terpisah. Contoh: col1: Tanggal col2: DateValue (tanggal masih Unicode dan nilai tanggal masih bilangan bulat)
Date DateValue
0 2012-07-01 391
1 2012-07-02 392
2 2012-07-03 392
. 2012-07-04 392
. ... ...
. ... ...
Bantuan apa pun ke arah ini akan sangat dihargai. Saya tidak dapat menemukan sumber daya pada dokumen panda untuk membantu saya dalam hal ini.
Saya tahu satu solusi mungkin untuk mengubah setiap pasangan kunci-nilai dalam dict ini, menjadi dict sehingga seluruh struktur menjadi dict dicts, dan kemudian kita dapat menambahkan setiap baris secara individual ke dalam dataframe. Tetapi saya ingin tahu apakah ada cara yang lebih mudah dan lebih langsung untuk melakukan ini.
Sejauh ini saya telah mencoba mengubah dict menjadi objek seri tetapi ini tampaknya tidak mempertahankan hubungan antara kolom:
s = Series(my_dict,index=my_dict.keys())
Jawaban:
Kesalahan di sini adalah sejak memanggil konstruktor DataFrame dengan nilai skalar (di mana ia mengharapkan nilai menjadi daftar / dict / ... yaitu memiliki beberapa kolom):
Anda bisa mengambil item dari kamus (yaitu pasangan nilai kunci):
Tapi saya pikir lebih masuk akal untuk melewati konstruktor Seri:
sumber
from_dict
memiliki orientasi kwarg, jadi saya mungkin menggunakannya jika saya ingin menghindari transposing. Ada beberapa opsi denganfrom_dict
, di bawah tenda itu tidak benar-benar berbeda dari menggunakan konstruktor DataFrame.pandas.core.common.PandasError: DataFrame constructor not properly called!
dari contoh pertamaSaat mengonversi kamus ke dalam kerangka data panda di mana Anda ingin kunci menjadi kolom kerangka data tersebut dan nilai-nilai tersebut menjadi nilai baris, Anda dapat melakukannya dengan menaruh tanda kurung di sekeliling kamus seperti ini:
Ini menyelamatkan saya dari sakit kepala, jadi saya harap ini membantu seseorang di luar sana!
EDIT: Dalam dokumen panda satu opsi untuk
data
parameter dalam konstruktor DataFrame adalah daftar kamus. Di sini kita melewati daftar dengan satu kamus di dalamnya.sumber
Seperti yang dijelaskan pada jawaban lain menggunakan
pandas.DataFrame()
langsung di sini tidak akan bertindak seperti yang Anda pikirkan.Apa yang dapat Anda lakukan adalah menggunakan
pandas.DataFrame.from_dict
denganorient='index'
:sumber
rename
metode apa pun untuk menetapkan nama indeks dan kolom sekaligus?Lewati item kamus ke konstruktor DataFrame, dan berikan nama kolom. Setelah itu parsing
Date
kolom untuk mendapatkanTimestamp
nilai.Perhatikan perbedaan antara python 2.x dan 3.x:
Dengan python 2.x:
Dalam Python 3.x: (membutuhkan 'daftar' tambahan)
sumber
PandasError: DataFrame constructor not properly called!
df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
ps khususnya, saya telah menemukan contoh Berorientasi Baris membantu; karena sering kali bagaimana catatan disimpan secara eksternal.
https://pbpython.com/pandas-list-dict.html
sumber
Panda memiliki fungsi bawaan untuk konversi dict ke frame data.
Untuk data Anda, Anda dapat mengonversinya seperti di bawah ini:
sumber
sumber
Anda juga bisa meneruskan kunci dan nilai kamus ke kerangka data baru, seperti:
sumber
Dalam kasus saya, saya ingin kunci dan nilai dict menjadi kolom dan nilai DataFrame. Jadi satu-satunya hal yang berhasil untuk saya adalah:
sumber
Ini yang berhasil bagi saya, karena saya ingin memiliki kolom indeks terpisah
sumber
Menerima dict sebagai argumen dan mengembalikan kerangka data dengan kunci-kunci dict sebagai indeks dan nilai-nilai sebagai kolom.
sumber
Beginilah cara kerjanya untuk saya:
saya harap ini membantu
sumber
Jika Anda tidak merangkum
yourDict.keys()
di dalamlist()
, maka Anda akan berakhir dengan semua kunci dan nilai Anda ditempatkan di setiap baris setiap kolom. Seperti ini:Date \ 0 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
1 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
2 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
3 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
4 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
Tetapi dengan menambahkan
list()
maka hasilnya terlihat seperti ini:Date Date_Values 0 2012-06-08 388 1 2012-06-09 388 2 2012-06-10 388 3 2012-06-11 389 4 2012-06-12 389 ...
sumber
Saya telah menjalankan beberapa kali ini dan memiliki contoh kamus yang saya buat dari suatu fungsi
get_max_Path()
, dan mengembalikan contoh kamus:{2: 0.3097502930247044, 3: 0.4413177909384636, 4: 0.5197224051562838, 5: 0.5717654946470984, 6: 0.6063959031223476, 7: 0.6365209824708223, 8: 0.655918861281035, 9: 0.680844386645206}
Untuk mengonversikan ini ke dataframe, saya menjalankan yang berikut ini:
df = pd.DataFrame.from_dict(get_max_path(2), orient = 'index').reset_index()
Mengembalikan kerangka data dua kolom sederhana dengan indeks terpisah:
index 0 0 2 0.309750 1 3 0.441318
Cukup ganti nama kolom menggunakan
f.rename(columns={'index': 'Column1', 0: 'Column2'}, inplace=True)
sumber
Saya pikir Anda dapat membuat beberapa perubahan dalam format data saat membuat kamus, lalu Anda dapat dengan mudah mengubahnya menjadi DataFrame:
memasukkan:
keluaran:
memasukkan:
output: akan menjadi DataFrame Anda
Anda hanya perlu menggunakan beberapa pengeditan teks di suatu tempat seperti Sublime atau mungkin Excel.
sumber