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

使用Pandas导入数据时如何按要求指定字符串、数值列的dtype?

解决方案

报错原因

  • 普通Python原生int/float类型不支持空值,当列中存在空字符串时强制转换会抛出ValueError
  • 直接指定dtype={'c': int}时,pandas会尝试将所有值(包括空值)转成原生int,无法处理空值就会报错
  • 列b被自动识别为数值类型时,前导零会被自动舍弃,必须手动指定该列类型为str才能保留原始格式

最简实现(一步到位)

直接使用pandas提供的**可空整数类型Int64(首字母大写)**处理空值,同时指定字符串列类型为str即可:

import io
import pandas as pd

s = """a,b,c,d
a1,,1,1.2
a2,00,,3.3
a3,01,3,2.3
a4,10,4,1.3"""

df = pd.read_csv(io.StringIO(s),
                 dtype={'a': str, 'b': str, 'c': 'Int64', 'd': float},
                 # 如果需要保留b列的空值为原始空字符串而非NaN,加下面这行
                 # keep_default_na=False
                )

输出结果:

a   b     c    d
0  a1  NaN     1  1.2
1  a2   00  <NA>  3.3
2  a3   01     3  2.3
3  a4   10     4  1.3

如果需要保留b列的空值为原始空字符串,取消注释keep_default_na=False即可,此时输出的b列第一行为空字符串,完全保留原始输入格式。

分步转换方案(兼容旧版pandas)

如果使用的pandas版本不支持可空类型,可以先全量读为字符串保证b列格式正确,再用pd.to_numeric处理数值列的空值:

# 全量读为字符串,关闭空值过滤保证原始格式完全保留
df = pd.read_csv(io.StringIO(s), dtype=str, na_filter=False)

# 转换c列,空字符串自动转NaN
df['c'] = pd.to_numeric(df['c'], errors='coerce')
# 转换d列
df['d'] = pd.to_numeric(df['d'], errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:24:04