Pandas сохраненный список как строка, но не может преобразовать его обратно из-за десятичного числа - PullRequest
1 голос
/ 18 июня 2020

Проблема: я сохранил несколько pandas df в виде файлов csv, и теперь я пытаюсь выполнить различные манипуляции, перезагружая указанные c df (из csv). Оказывается, когда я сохранил to_csv (), список словарей, связанных с определенным ключом c, был сохранен в виде строки. Ниже представлена ​​структура одной строки сохраненного мной df:

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

Есть ли простой способ преобразовать строку, связанную с ключом X, обратно в список словарей? Мне нужно, чтобы это было так, чтобы я мог создать подпрограмму pd.DataFrame (), чтобы смотреть в пределах этого ключа c.

Я читал об ast.literal_eval (), но ему не нравится Decimal () ... Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 18 июня 2020

Вы можете сделать это с помощью eval(), поскольку ast.literal_eval() не преобразуется в объект Decimal(), просто обратите внимание, что вам нужно хорошо знать свои данные с помощью этого метода.
Метод eval() выполнит заданное string точно так же, как интерпретатор Python, поэтому он будет создавать объекты, которые в данной строке в вашем случае Decimal().

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

Output

[{'product': 'ABC',
  'quantity': 1,
  'price': Decimal('91.9899999999999948840923025272786617279052734375')},
 {'product': 'YXZ',
  'quantity': 2,
  'price': Decimal('11.9900000000000002131628207280300557613372802734375')}]
...