python Pandas -跳过“apply”函数在[duplicate]上抛出错误的行

3hvapo4f  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(148)

此问题已在此处有答案

How to use ast.literal_eval in a pandas dataframe and handle exceptions(2个答案)
14小时前关闭
所以我有这个简单的代码

import ast

df = df["strings"].apply(ast.literal_eval)

它只是将字符串形式的列表中的一列转换回字符串。我得到一个错误ValueError: malformed node or string: 0,我希望apply跳过它失败的行,只返回它成功的行的数据框架。我该怎么做?

ryevplcw

ryevplcw1#

我假设“字符串形式”是指单个字符串的列表(如["foo"])。
您可以使用在数据框架上应用的简单 Package 函数来完成您想要的任务:

import ast

def wrap(x):
    try:
        a = ast.literal_eval(x)
        return(a)
    except:
        pass

df = df["strings"].apply(wrap)

然而,最好先评估数据框架中的行为什么会导致错误。垃圾进,垃圾出。

dfuffjeb

dfuffjeb2#

你可以将ast.literal_eval封装在一个try/except块中。考虑以下几点:

import pandas as pd
import ast

def func(s):
    try:
        return ast.literal_eval(s)
    except:
        return []

data = list(map(str,[[i+j for j in range(3)] for i in range(10)]))
data += ['[[]']
df = pd.DataFrame(
    {"strings":data}
)
result = df["strings"].apply(func)

相关问题