Python 如何在数据帧中使用ast.literal_eval并处理异常

Python 如何在数据帧中使用ast.literal_eval并处理异常,python,pandas,tuples,Python,Pandas,Tuples,我有一个dataframe,其中一列包含一个tuple数据作为字符串。例如,”(5,6)。我需要把它转换成元组结构。一种方法是使用ast.literal\u eval()。我是这样使用它的 df['Column'] = df['Column'].apply(ast.literal_eval) 不幸的是,此列中的数据也包含空字符串。ast.literal\u eval()无法处理此问题。我得到这个错误 语法错误:解析时出现意外的EOF 我不确定这是否是因为它无法处理这样的字符。根据我的阅读,我发

我有一个
dataframe
,其中一列包含一个
tuple
数据作为字符串。例如,
”(5,6)
。我需要把它转换成元组结构。一种方法是使用ast.literal\u eval()。我是这样使用它的

df['Column'] = df['Column'].apply(ast.literal_eval)
不幸的是,此列中的数据也包含空字符串。
ast.literal\u eval()
无法处理此问题。我得到这个错误

语法错误:解析时出现意外的EOF

我不确定这是否是因为它无法处理这样的字符。根据我的阅读,我发现
ast.literal\u eval()
仅在列表、dict或tuple位于字符串结构中的情况下有效

为了克服这个问题,我尝试创建自己的函数,并在引发异常时返回空字符串

def literal_return(val):
    try:
        return ast.literal_eval(val)
    except ValueError:
        return (val)

df['Column2'] = df['Column'].apply(literal_return)

即使在这种情况下,也会弹出相同的错误。我们如何处理这个问题。即使有一种方法可以忽略某些行来应用函数并应用于其余行,这也将非常好。感谢您的帮助。

当功能更改为:

def literal_return(val):
    try:
        return ast.literal_eval(val)
    except (ValueError, SyntaxError) as e:
        return val

我只需要从每个条目中输入字符串类型即可:

from ast import literal_eval
df['column_2'] = df.column_1.apply(lambda x: literal_eval(str(x)))
如果需要高级异常处理,可以执行以下操作,例如:

def f(x):
    try:
        return literal_eval(str(x))   
    except Exception as e:
        print(e)
        return []

df['column_2'] = df.column_1.apply(lambda x: f(x))   

你能发布一个小样本的数据帧,这样我们就可以验证空字符串是问题所在吗?我很抱歉,我可能无法做到这一点。我之所以这么说,是因为我查看了数据集,但在该列中找不到任何其他类型的数据。再说一次,不要误会我必须有一个我认为我的解决方法是正确的,只是我没有处理语法错误的异常。一旦我这样做了,它的工作很好。我再次表示歉意,因为无法在
except
语句中发布示例,请删除
ValueError
,并在其中返回一些空字符串
'
null
。我想现在它可能会解决你的问题。为了获得正确的解决方案,我们可能需要有关数据集的更多详细信息。