关于两个函数输出差异及lambda中ast.literal_eval作用的技术问询
问题解答
匿名函数的作用
这个lambda x: ast.literal_eval(x) if isinstance(x,str) else np.nan是用于数据清洗的匿名函数,具体逻辑如下:
- 先检查输入值
x是否为字符串类型 - 若
x是字符串,通过ast.literal_eval()将其转换成对应的Python原生数据结构——比如把字符串格式的"[1,2,3]"转成列表、"{'key': 'value'}"转成字典、"123"转成整数,且该方法比普通eval()更安全,不会执行字符串中的恶意代码 - 若
x不是字符串,直接返回np.nan(NumPy的缺失值标记,用来统一标记非字符串类的无效/缺失数据)
两个函数的输出差异原因
结合截图内容来看,差异核心在于:
- 用了该lambda的函数,会把字符串格式的结构化数据(如列表、字典)解析成真实的Python对象,输出对应的数据结构
- 未使用该lambda的函数,会直接保留原字符串格式,输出依旧是字符串类型,自然和前者结果不同
内容的提问来源于stack exchange,提问作者Akash Suklabaidya
相关产品推荐
相关产品推荐

