我有一个带有
val_string
列的数据框,有时会填充 Base64 编码的字符串,有时会填充 NaN。
df
base_type val_int val_string
0 integer 34 NaN
1 string NaN c3RyaW5nMQ==
2 integer 108 NaN
3 integer 3586 NaN
4 string NaN c3RyaW5nMg==
如何将
base64.b64decode
仅应用于 val_string
不为 NaN 的行?
我尝试了这个,结果却得到了一个奇怪的
OSError: could not get source code
:
df['val_string'] = df['val_string'].apply(lambda x: df['val_string'] if pd.isna(df['val_string']) else base64.b64decode(x))
任何帮助将不胜感激!
使用布尔索引:
from base64 import b64decode
m = df['val_string'].notna()
df.loc[m, 'val_string'] = df.loc[m, 'val_string'].apply(b64decode)
输出:
base_type val_int val_string
0 integer 34.0 NaN
1 string NaN b'string1'
2 integer 108.0 NaN
3 integer 3586.0 NaN
4 string NaN b'string2'