如何删除Python DataFrame中作为缺失值的点(.)
问题原因
df.dropna() 仅能识别pandas默认的标准缺失值类型,包括np.nan、None、pd.NA。你的数据里作为缺失标识的点符号.是字符串格式,不属于默认缺失值范畴,因此无法被dropna()识别移除。
可落地操作方案
- 方案1:数据读取阶段提前标记缺失值(推荐)
如果还在数据导入环节,调用pd.read_csv()、pd.read_excel()等读取接口时,通过na_values参数直接指定.为缺失值标识,读入后这类符号会自动转为标准NaN,后续可直接用dropna()删除:
import pandas as pd # 读取文件时将.识别为缺失值 df = pd.read_csv("你的本地数据路径.csv", na_values='.') # 正常执行缺失值删除即可 df_clean = df.dropna()
- 方案2:对已加载完成的DataFrame做替换处理
如果数据已经读入为DataFrame,先将全表的.替换为标准缺失值,再执行删除操作:
import pandas as pd import numpy as np # 将所有值为.的单元格替换为numpy标准缺失值np.nan df = df.replace('.', np.nan) # 执行缺失值删除 df_clean = df.dropna()
如果仅部分列存在.形式的缺失值,不需要全表替换,可以指定列操作,减少不必要的性能消耗:
# 仅对col_a、col_b两列做替换 target_cols = ['col_a', 'col_b'] df[target_cols] = df[target_cols].replace('.', np.nan) df_clean = df.dropna()
如果存在点符号前后带空格的脏数据(比如' .'、'. '),可以用正则匹配做替换,避免漏处理:
# 匹配前后带任意数量空白字符的.,统一替换为缺失值 df = df.replace(r'^\s*\.\s*$', np.nan, regex=True) df_clean = df.dropna()
内容的提问来源于stack exchange,提问作者Emy
相关产品推荐
相关产品推荐

