如何筛选Pandas DataFrame目标列中的非数值型单元格?
如何在Pandas中筛选object列里的非数值型单元格
针对你遇到的场景——某列应为float类型但实际是object类型,需要找出其中所有非数值型单元格,这里提供两种通用且可靠的方法,适配未知异常值的情况:
方法一:利用pd.to_numeric强制转换并筛选NaN
pd.to_numeric可以尝试将列转为数值类型,通过errors='coerce'参数把无法转换的内容转为NaN,之后筛选出这些NaN对应的原单元格即可,这是最通用的方案:
import pandas as pd # 读取数据集(修正原示例的URL拼接问题) url = 'https://ml-repository-krakers.s3-eu-west-1.amazonaws.com/kaggle+/churn_modelling/Telco-Customer-Churn.csv' df = pd.read_csv(url) # 筛选目标列中无法转为数值的单元格 target_col = 'TotalCharges' non_numeric_mask = pd.to_numeric(df[target_col], errors='coerce').isna() non_numeric_values = df[target_col][non_numeric_mask] # 查看结果 print(non_numeric_values)
这个方法无需提前知道异常值的具体内容(比如空格、字符串等),所有无法转为float的内容都会被筛选出来,适合未知异常值的场景。
方法二:用正则表达式匹配数值格式
通过正则表达式匹配标准的数值格式(整数、小数、正负值),筛选出不匹配的内容:
# 匹配正负整数、小数格式,取反得到非数值行 non_numeric_values = df[target_col][~df[target_col].str.match(r'^-?\d+(\.\d+)?$', na=False)] print(non_numeric_values)
注:na=False确保如果列中存在pd.NA类型的空值,也会被纳入非数值范围。
额外:统计异常值的种类与数量
如果需要明确异常值的具体类型和出现次数,可以配合value_counts():
print(non_numeric_values.value_counts())
在你提供的Telco-Customer-Churn数据集中,执行后会发现TotalCharges列的非数值值全是空格,和你示例中的结果一致。
内容的提问来源于stack exchange,提问作者BsAxUbx5KoQDEpCAqSffwGy554PSah
相关产品推荐
相关产品推荐

