将具有 nan 值的 str 类型字典转换为字典类型 objects

Convert str type dicts with nan values to dict type objects

与此类似的问题已被问过很多次,但令人惊讶的是,很少有答案似乎能解决我认为我的问题所在。

我有一个或多个列的 csv 文件,每个单元格中包含一个字典。在 read_csv 步骤之后,我在这些列上尝试了 ast.literal_eval,以便将 str 格式的字典转换为字典类型 objects。但是,我不断收到 malformed node or string 错误。

这里是有问题的字典的典型示例:{1: 3681.45, 0: 3693.3333333333335}。另一个具有 nan 值:{1: 4959.95652173913, 0: nan}。编辑:实际上 这个 nan 值导致了错误(请参阅下面的 Rakesh 解决方案)。

翻阅之前的回答,这个错误的一个原因可能是因为这些列中dicts的大部分值都是浮点数,显然literal_eval不能处理floats或nans,即使它们包含在字典中(尽管这是我从有关元组的问题中推断出来的)。

为了获得这么多信息,我不得不阅读了很多问题和答案,所以我认为用关键字 strdict 开始一个新主题可能会有用,但也nan 在标题中。

非常感谢任何帮助!

在具有 nan

的 json 上使用 eval

例如:

import ast
from numpy import nan

print(ast.literal_eval("{1: 3681.45, 0: 3693.3333333333335}"))
print(eval("{1: 4959.95652173913, 0: nan}"))

df = pd.DataFrame({"A": ["{1: 4959.95652173913, 0: nan}", "{1: 4959.95652173913, 0: nan}"]})
df['B'] = df["A"].apply(lambda x: eval(x))
print(df)

输出:

                               A                              B
0  {1: 4959.95652173913, 0: nan}  {1: 4959.95652173913, 0: nan}
1  {1: 4959.95652173913, 0: nan}  {1: 4959.95652173913, 0: nan}