如何将Python DataFrame的object列转换为int与string类型
数据类型转换正确实现方案
现有方案错误原因
- 方案二错误:每次执行
df = df[列名].astype(str)都会直接将整个DataFrame覆盖为单列的Series对象,多次赋值后df最终仅保留最后一次操作的列数据,自然会丢失全部原有数据。 - 方案一未达预期的两个核心原因:
- Age列转换int失败:大概率是Age列存在非数值内容(比如空值NaN、非法字符串如'未知'/'N/A'等),普通int类型不支持存储空值,转换会隐性失败或报错。
- 字符串列转换后仍显示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
相关产品推荐
相关产品推荐

