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

如何将Python DataFrame的object列转换为int与string类型

数据类型转换正确实现方案

现有方案错误原因

  • 方案二错误:每次执行df = df[列名].astype(str)都会直接将整个DataFrame覆盖为单列的Series对象,多次赋值后df最终仅保留最后一次操作的列数据,自然会丢失全部原有数据。
  • 方案一未达预期的两个核心原因:
    1. Age列转换int失败:大概率是Age列存在非数值内容(比如空值NaN、非法字符串如'未知'/'N/A'等),普通int类型不支持存储空值,转换会隐性失败或报错。
    2. 字符串列转换后仍显示object:你使用的astype('str')在pandas中默认是用object类型存储字符串,且空值会被转换为'nan'字符串,不符合真实业务需求;另外你漏了First Name、Surname两列的转换配置,所以这两列类型没有变化。

正确转换代码

第一步:读取数据

import pandas as pd
df = pd.read_csv('user-data.csv')

第二步:转换整数类型列

如果允许Age列存在空值,使用pandas支持空值的Nullable整数类型Int64:

# 先将Age列转为数值,非法值统一转为空值
df['Age'] = pd.to_numeric(df['Age'], errors='coerce')
# 转为可空整数类型
df['Age'] = df['Age'].astype('Int64')

# House Number本身已转换成功,无需额外处理,若有异常也可按上述逻辑处理

如果要求Age必须为普通int类型,提前处理空值即可:

df['Age'] = pd.to_numeric(df['Age'], errors='coerce').fillna(0).astype('int')

第三步:转换字符串类型列

使用pandas专用的string类型,转换后dtype会显式标记为string,且保留原生空值:

# 所有需要转字符串的列清单
str_columns = [
    'Street', 'First Name', 'Surname',
    'Relationship to Head of House', 'Marital Status',
    'Gender', 'Occupation', 'Infirmity', 'Religion'
]
# 批量转换
df[str_columns] = df[str_columns].astype('string')

验证转换结果

执行以下代码查看类型是否符合预期:

print(df.info())

补充说明

如果你使用的pandas版本低于1.0,不支持string专用类型,使用astype(str)后dtype显示为object属于正常现象,只要确认列内容均为字符串格式即符合转换要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:05