You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含缺失值的Python DataFrame中仅对非空行解码base64

解决方法

错误原因

你写的lambda函数犯了核心错误:在判断和返回值时误用了整个df['val_string']列,而非当前行的元素x。pd.isna(df['val_string'])会返回一个布尔Series,而非单个布尔值,这和后续的解码操作逻辑冲突,因此触发了异常。

正确实现方式

方法1:修正lambda逻辑

直接针对每个元素x做判断,同时注意base64.b64decode返回的是字节对象,通常需要解码为字符串:

import pandas as pd
import base64

# 修正后的代码
df['val_string'] = df['val_string'].apply(lambda x: x if pd.isna(x) else base64.b64decode(x).decode('utf-8'))

执行后结果会变成:

base_type   val_int val_string
0     integer        34        NaN
1      string       NaN    string1
2     integer       108        NaN
3     integer      3586        NaN
4      string       NaN    string2

方法2:用掩码定位处理(更高效)

先筛选出非NaN的行,再针对性解码,避免对所有行做判断:

mask = df['val_string'].notna()
df.loc[mask, 'val_string'] = df.loc[mask, 'val_string'].apply(lambda x: base64.b64decode(x).decode('utf-8'))

这种方式在数据量较大时性能更优,因为只处理需要解码的行。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:07:36