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')}]
问题: 我将多个 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')}]