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

如何修复因空字符串被识别为字符串类型的Pandas数值列

问题

我有一个Pandas DataFrame,其中部分列应为数值类型,但因存在空字符串,这些列被错误识别为object类型。如何移除空字符串并将列转换为正确的int/float类型?

假设A列数据如下:

2
1
0
''
NULL
Name: A, dtype: object

期望的A列应为:

2
1
0
NULL
NULL 
Name: A, dtype: int

我尝试了以下代码,但数据类型未改变,数字仍被视为字符串:

print(df[col].dtypes)
df[col].replace(r'^\s*$', np.nan, regex=True, inplace=True)
print(df[col].dtypes)

输出结果:

object
object

我不想使用str.isnumeric()转换数据类型,因为这会影响其他真实字符串列,有没有更好的方法?

解决方案

方法1:用pd.to_numeric()直接转换(推荐)

pd.to_numeric()是处理这类场景的最优方案,它会自动尝试将字符串转为数值,无法转换的内容可指定转为缺失值,且仅针对目标列操作,不会影响其他字符串列。

代码示例:

import pandas as pd
import numpy as np

# 针对目标列执行转换,无法转数值的内容转为NaN
df[col] = pd.to_numeric(df[col], errors='coerce')
# 转为可空整数类型(普通int不支持NaN,大写I的Int64是Pandas提供的可空类型)
df[col] = df[col].astype('Int64')

方法2:先替换空值再转换

如果需要先统一处理空字符串、'NULL'这类标记值,再转换类型:

# 把空字符串、'NULL'、空白字符串统一替换为NaN
df[col] = df[col].replace(['', 'NULL', r'^\s*$'], np.nan, regex=True)
# 转换为数值类型再转可空整数
df[col] = pd.to_numeric(df[col]).astype('Int64')

原代码失效原因

你之前只做了空字符串替换,但replace操作不会自动修改列的 dtype——替换后列中同时存在字符串类型的数字和浮点型的NaN,所以依然是object类型,必须显式调用转换函数来变更类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:48:11