Pandas 将列表存储为字符串,但由于十进制无法将其转换回

Pandas stored list as string, but cannot convert it back due to decimal

问题: 我将多个 pandas df 保存为 csv 文件,现在我试图通过重新加载特定的 df(从 csv)来进行不同的操作。事实证明,当我保存 to_csv() 时,与特定键关联的字典列表被存储为字符串。下面是我存储的df的一行结构:

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

有没有一种简单的方法可以将与键 X 关联的字符串转换回字典列表?我需要这样才能创建一个 sub pd.DataFrame() 来查看该特定键。

我已阅读有关 ast.literal_eval() 的内容,但它不喜欢 Decimal()...将不胜感激所有帮助!

您可以使用 eval() 来完成此操作,因为 ast.literal_eval() 不会转换为 Decimal() 对象,请注意您需要非常了解使用此方法的数据。
eval() 方法将执行给定的字符串,就像 Python 解释器一样,因此它将在您的情况 Decimal().

的给定字符串中创建对象
val = "[{'product':'ABC', 'quantity':1, 'price':Decimal(91.99)}, {'product':'YXZ', 'quantity':2, 'price':Decimal(11.99)}"
print(eval(val))

输出

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