使用 eval() 解析时出现 EOF 错误

Getting EOF error while parsing when using eval()

在我的数据框中,我有一个名为 'items'(类似字符串的列表)的列,如下所示

是字符串类型。我想把它转换成一个列表。 我尝试了各种方法,例如 ast.literal_eval 、eval 等。

import ast
import json
import numpy as np
null= None
d['items']=d['items'].apply(lambda x:ast.literal_eval(str(x)) if(np.all(pd.notnull(x))) else x )

通过使用 ast.literal_eval 方法,我得到了这个错误 -ValueError: malformed node or string: <_ast.Name object at 0x0000019AE0EA4B80>

通过使用 eval() 方法我得到这个错误 - 文件“”,行未知语法错误:解析时意外的 EOF

d['items']=d['items'].apply(lambda x:ast.literal_eval(str(x)) if(np.all(pd.notnull(x))) else x )

我有 139358 行的数据。在此数据中,有可能包含 null、None 或任何其他可能导致此 EOF 错误的元素。我假设我已经使用 if 条件正确处理了 nans -('if(np.all(pd.notnull(x)))').

如果有帮助,请提出任何异常处理建议,或者让我知道可以将这些类似列表的字符串转换为列表的任何解决方案。

最后,items中记录的数据类型应该是列表而不是字符串(字符串到列表的转换) 提前致谢!

Answer: My data had Invalid JSON objects. So written an if statement to filter out the invalid JSONS

使用内置的json.loads()函数:

import json
import numpy as np
d['items']=d['items'].apply(lambda x:json.loads(x) if(np.all(pd.notnull(x))) else x)

请尝试以下操作。请注意这是否有帮助。这很简单,我尝试了输入。检查并告诉我。

`for i in df['items']:
   if isinstance(i, str):
      x=eval(i)
      df['items'][i]=x`

确定数据是否完美JSON或不