使用Pandas处理含Unknown的空值及字符串转float报错问题
解决Pandas中"Unknown"空值删除与数值列转换问题
你遇到的核心问题是数据集里的空值被存储为字符串"Unknown",而非Pandas默认识别的NaN,所以常规的isnull()、dropna()方法才会失效。另外fine列转float报错,大概率是因为列里还混杂着"Unknown"或者其他非数值格式的内容,咱们一步步来解决:
第一步:删除包含"Unknown"的行
因为所有空值都被替换成了"Unknown"字符串,我们可以通过两种方式清理这些无效行:
方法1:直接筛选排除
# 筛选出所有列中都不等于"Unknown"的行 gdpr_fines_cleaned = gdpr_fines[~gdpr_fines.isin(["Unknown"]).any(axis=1)]
方法2:先转回NaN再删除
# 把所有"Unknown"替换为真正的NaN gdpr_fines.replace("Unknown", pd.NA, inplace=True) # 删除包含NaN的行 gdpr_fines_cleaned = gdpr_fines.dropna()
处理完后可以用gdpr_fines_cleaned.info()确认数据量变化,以及各列的非空值数量是否符合预期。
第二步:将fine列转换为数值类型
转float报错的原因,除了残留的"Unknown",还可能是fine列的字符串里包含货币符号(比如€、$)、千位分隔符逗号(比如1,000,000)这类非数值字符,需要先清理再转换:
# 先清理fine列的非数值字符(根据你的实际数据调整符号,这里假设是欧元符号和逗号) gdpr_fines_cleaned['fine'] = gdpr_fines_cleaned['fine'].str.replace(r'[€,$,]', '', regex=True) # 转换为float类型 gdpr_fines_cleaned['fine'] = gdpr_fines_cleaned['fine'].astype(float)
如果清理后仍有报错,可以用pd.to_numeric()配合errors='coerce'强制转换,同时把无法转换的值转为NaN(后续可按需处理这些异常值):
gdpr_fines_cleaned['fine'] = pd.to_numeric(gdpr_fines_cleaned['fine'], errors='coerce')
这时可以用gdpr_fines_cleaned['fine'].isnull().sum()查看剩余异常值数量,再决定删除或填充。
验证处理结果
最后用以下代码确认数据是否处理正确:
print(gdpr_fines_cleaned.info()) print(gdpr_fines_cleaned['fine'].head())
内容的提问来源于stack exchange,提问作者Elja Suhonen
相关产品推荐
相关产品推荐

