如何在熊猫数据框中使用ast.literal_eval并处理异常

时间:2018-09-08 06:40:35

标签: python pandas tuples

我有一个dataframe,其中一列包含一个tuple数据作为字符串。例如。 '(5,6)'。我需要将其转换为元组结构。一种方法是使用ast.literal_eval()。我以这种方式使用它。

df['Column'] = df['Column'].apply(ast.literal_eval)

不幸的是,我在此列中的数据也包含空字符串。 ast.literal_eval()无法处理此问题。我收到此错误。

SyntaxError: unexpected EOF while parsing

我不确定这是否是因为无法处理此类字符。根据我的阅读,我发现ast.literal_eval()仅在字符串结构中存在列表,字典或元组的情况下才有效。

为解决这个问题,我尝试创建自己的函数,如果引发异常,则返回一个空字符串。

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

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

即使在这种情况下,也会弹出相同的错误。我们该如何处理。即使有一种方法可以忽略某些行以应用该功能并在其余行上应用,这也将是很好的。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

当功能更改为:

时,此功能有效
def literal_return(val):
    try:
        return ast.literal_eval(val)
    except (ValueError, SyntaxError) as e:
        return val

答案 1 :(得分:0)

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

from ast import literal_eval
df['column_2'] = df.column_1.apply(lambda x: literal_eval(str(x)))