如何在pandas中将DataFrame空值、全空格字段替换为'unknown'字符串
问题原因
apply方法默认按列遍历,你写的lambda函数里的x实际是一整列的Series对象,不是单个单元格元素,所以isinstance(x, str)的判断永远不成立,替换逻辑根本没有执行。- 你自定义的替换值存放在变量
value里,代码里错写为np.value,numpy不存在这个属性,就算遍历到单个元素也会触发报错。
修复方案
方法1:修改原遍历逻辑
把apply换成针对单个元素遍历的applymap,同时修正变量引用即可:
import pandas as pd import numpy as np df = pd.DataFrame([ [-0.532681, 'foo', 0], [1.490752, 'bar', 1], [-1.387326, 'foo', 2], [0.814772, 'baz', ' '], [-0.222552, ' ', 4], [-1.176781, 'qux', ' '], ], columns='A B C'.split(), index=pd.date_range('2000-01-01','2000-01-06')) value = 'unknown' # 仅修改这一行即可 df = df.applymap(lambda x: value if isinstance(x, str) and x.isspace() else x) print(df)
方法2:更高效的内置正则替换
不需要遍历,直接用pandas内置的正则替换功能,性能更优,写法更简洁:
# ^\s*$ 匹配完全为空白/空内容的字符串 df = df.replace(r'^\s*$', 'unknown', regex=True)
注:你原代码里写的替换值拼写为unkown,正确英文拼写为unknown,可根据自己的需求调整。
内容的提问来源于stack exchange,提问作者Al-Andalus
相关产品推荐
相关产品推荐

