You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量处理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写法存在两个问题:

  1. 当元素是“?”时,replace('?', '')会得到空字符串,float("")会抛出 ValueError;
  2. 列中元素本身就是单独的“?”或浮点数字符串,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)

原代码的问题

  1. if '?' in df[i]语法错误,缺少冒号;
  2. '?' in df[i]实际是检查列的索引/列名是否包含“?”,而非列元素;
  3. 如果列中没有“?”,df[i].value_counts()['?']会抛出 KeyError,因为该键不存在。

内容的提问来源于stack exchange,提问作者Vikas Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:35:19