如何批量处理Pandas含‘?’的列并转换为float64及统计数量
问题1:将含“?”的object列转换为float64并替换“?”为NaN
直接用pd.to_numeric()是最简洁高效的方案,该函数支持将无法转换为数值的内容(比如“?”)自动转为NaN,同时完成类型转换,还能批量处理列:
import pandas as pd # 批量处理所有object类型的列 for col in df.select_dtypes(include=['object']).columns: df[col] = pd.to_numeric(df[col], errors='coerce')
原代码无效的原因
你的apply写法存在两个问题:
- 当元素是“?”时,
replace('?', '')会得到空字符串,float("")会抛出 ValueError; - 列中元素本身就是单独的“?”或浮点数字符串,
x.split()[0]属于多余操作,反而可能在某些异常值下出错。
问题2:统计所有列中“?”的数量
可以通过逐列统计等于“?”的元素个数来实现,以下是两种可靠方案:
方案1:循环统计(直观易懂)
question_mark_counts = {} for col in df.columns: # 统计当前列中"?"的数量 count = df[col].eq('?').sum() question_mark_counts[col] = count # 打印结果 print(pd.Series(question_mark_counts))
方案2:一行代码批量统计(简洁高效)
question_mark_counts = df.apply(lambda col: col.eq('?').sum()) print(question_mark_counts)
原代码的问题
if '?' in df[i]语法错误,缺少冒号;'?' in df[i]实际是检查列的索引/列名是否包含“?”,而非列元素;- 如果列中没有“?”,
df[i].value_counts()['?']会抛出 KeyError,因为该键不存在。
内容的提问来源于stack exchange,提问作者Vikas Sharma
相关产品推荐
相关产品推荐

