如何在含缺失值的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
相关产品推荐
相关产品推荐

