You need to enable JavaScript to run this app. 如何使用pandas方法修改各列指定数据类型(如ID转int64)
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas方法修改各列指定数据类型(如ID转int64)

Pandas 指定列调整数据类型的实现方法

结合你提供的示例表结构,可落地的操作流程如下:

前置准备

首先将文本格式的表格读入pandas环境,读入完成后先执行df.dtypes查看每列当前的默认数据类型,跳过不需要调整的列,减少冗余操作。

核心实现方法

方法1:逐列单独转换(适合列数少、临时调整的场景)

直接对目标列调用astype()方法指定目标类型,遇到特殊格式的列(比如时间戳)用pandas自带的专用转换函数处理,可直接运行的示例代码:

import pandas as pd
# 读取示例文本表格
df = pd.read_clipboard(sep='\s+')

# 逐列调整目标类型
df['ID'] = df['ID'].astype('int64')  # 示例中ID无缺失值,可直接转为int64
df['Foo'] = df['Foo'].astype('float64')  # Foo列存储小数值,指定为浮点类型
df['Bla'] = df['Bla'].astype('string')  # Bla列包含文本值和空值,指定为字符串类型
df['Bar'] = df['Bar'].astype('string')  # Bar列为文本值,统一为字符串类型
# Timestamp列注意:示例中存在写反月日的日期(2020-15-04无对应自然月份),转换时通过errors参数兼容异常值
df['Timestamp'] = pd.to_datetime(df['Timestamp'], format='%Y-%d-%m', errors='coerce')

方法2:读入时批量指定列类型(适合正式数据处理流程,稳定性更高)

在调用read_*类方法读入数据时,直接通过参数提前指定所有列的目标类型,比读入后再转换的报错概率更低,示例代码:

df = pd.read_clipboard(
    sep='\s+',
    dtype={
        'ID': 'int64',
        'Foo': 'float64',
        'Bla': 'string',
        'Bar': 'string'
    },
    parse_dates=['Timestamp']
)
# 由于示例中Timestamp是“年-日-月”的书写格式,需要单独修正识别规则
df['Timestamp'] = pd.to_datetime(df['Timestamp'], format='%Y-%d-%m', errors='coerce')

实操避坑提示

  • 转换存在缺失值的整数列时不能硬转:常规int64类型不支持存储空值,如果目标整数列包含空值,直接调用astype('int64')会触发类型报错。此时可以要么先用固定值填充缺失值再转换,要么使用pandas的可空整数类型Int64(大写I)存储带缺失值的整数列
  • 时间列转换必须匹配实际书写格式:你示例中的Timestamp把月、日写反了(比如2020-15-04,实际是2020年4月15日,按常规格式识别会判定15为无效月份),必须手动指定格式匹配规则,否则pandas会把异常值全部标记为NaT
  • 文本列不要长期用默认object类型存储:object类型的运算、存储效率远低于标准的string、category类型,转换后后续数据处理的速度会有明显提升

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 10:15:04