Masalahnya: Saya menyimpan banyak pandas df sebagai file csv, dan sekarang saya mencoba melakukan manipulasi yang berbeda dengan memuat ulang df tertentu (dari csv). Ternyata ketika saya menyimpan to_csv(), daftar kamus yang terkait dengan kunci tertentu disimpan sebagai string. Di bawah ini adalah struktur dari satu baris df yang saya simpan:

{key1 : value1, key2 : value2, ..., key X, "[{'product':'ABC', 'quantity':1, 'price':Decimal(91.99)}, {'product':'YXZ', 'quantity':2, 'price':Decimal(11.99)}, ..]", ..}

Apakah ada cara mudah untuk mengonversi string yang terkait dengan kunci X kembali ke daftar kamus? Saya membutuhkannya agar saya dapat membuat sub pd.DataFrame() untuk melihat ke dalam kunci khusus itu.

Saya telah membaca tentang ast.literal_eval(), tetapi tidak menyukai Desimal()... Semua bantuan akan sangat dihargai!

1
jsmatte 18 Juni 2020, 08:08

1 menjawab

Jawaban Terbaik

Anda dapat melakukannya dengan eval() karena ast.literal_eval() tidak mengonversi ke objek Decimal(), perhatikan bahwa Anda harus sangat menyadari data Anda dengan metode ini.
Metode eval() akan mengeksekusi string yang diberikan seperti interpreter Python sehingga akan membuat objek dalam string yang diberikan dalam kasus Anda Decimal().

val = "[{'product':'ABC', 'quantity':1, 'price':Decimal(91.99)}, {'product':'YXZ', 'quantity':2, 'price':Decimal(11.99)}"
print(eval(val))

Keluaran

[{'product': 'ABC',
  'quantity': 1,
  'price': Decimal('91.9899999999999948840923025272786617279052734375')},
 {'product': 'YXZ',
  'quantity': 2,
  'price': Decimal('11.9900000000000002131628207280300557613372802734375')}]
1
Leo Arad 18 Juni 2020, 05:39