如何将Pandas DataFrame含空值的Object类型列转为Int类型?
解决CSV列转换为整数类型的问题
问题分析
你之前的转换失败核心原因有两个:
- 使用
errors='ignore'会保留无法转换为数字的元素(比如非数字字符串),导致整列仍维持object类型; - 普通
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
相关产品推荐
相关产品推荐

