将具有 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,即使它们包含在字典中(尽管这是我从有关元组的问题中推断出来的)。
为了获得这么多信息,我不得不阅读了很多问题和答案,所以我认为用关键字 str
、dict
开始一个新主题可能会有用,但也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}
与此类似的问题已被问过很多次,但令人惊讶的是,很少有答案似乎能解决我认为我的问题所在。
我有一个或多个列的 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,即使它们包含在字典中(尽管这是我从有关元组的问题中推断出来的)。
为了获得这么多信息,我不得不阅读了很多问题和答案,所以我认为用关键字 str
、dict
开始一个新主题可能会有用,但也nan
在标题中。
非常感谢任何帮助!
在具有 nan
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}