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

如何将Pandas DataFrame含空值的Object类型列转为Int类型?

解决CSV列转换为整数类型的问题

问题分析

你之前的转换失败核心原因有两个:

  1. 使用errors='ignore'会保留无法转换为数字的元素(比如非数字字符串),导致整列仍维持object类型;
  2. 普通int类型不支持存储缺失值(None/NaN),强制转换会因类型冲突失败,最终保留原列类型。

解决方案

步骤1:排查并清理异常值

先确认列中除None外是否存在其他非数字内容(如空字符串、特殊字符):

# 查看列中所有唯一值
print(df['Length (minutes)'].unique())

# 筛选出无法转换为数字的行
invalid_rows = df[pd.to_numeric(df['Length (minutes)'], errors='coerce').isna()]
print(invalid_rows)

如果存在非数字异常值(比如'N/A'、空字符串),先统一替换为缺失值:

df['Length (minutes)'] = df['Length (minutes)'].replace(['', 'N/A'], pd.NA)

步骤2:转换为可空整数类型

Pandas的**可空整数类型Int64(大写I)**支持同时存储整数和缺失值,这是解决问题的关键:

方法一:读取CSV时直接处理
df = pd.read_csv(
    "workouts.csv",
    dtype={'Length (minutes)': 'Int64'},
    na_values=['None', '']  # 将CSV中的"None"字符串、空字符串识别为缺失值
)
方法二:读取后转换
# 先将非数字内容转为NaN,再转可空整数类型
df['Length (minutes)'] = pd.to_numeric(df['Length (minutes)'], errors='coerce').astype('Int64')

验证结果

执行转换后检查列类型:

>>> df.dtypes
Workout Timestamp      object
Live/On-Demand         object
Instructor Name        object
Length (minutes)       Int64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:55:13