如何将DataFrame中float64类型ID列转为int类型并处理缺失值?
字符串格式float转int的解决方案
你的代码无效的核心原因是目标列是字符串类型(object),而非真正的数值型float,直接调用astype无法完成转换。以下是可行的处理步骤:
单列处理(以ProviderID为例)
import numpy as np import pandas as pd # 第一步:将字符串格式的"x.0"转换为数值型,无法转换的内容(含原缺失值)转为NaN df_claims['ProviderID'] = pd.to_numeric(df_claims['ProviderID'], errors='coerce') # 第二步:临时填充缺失值、转int、还原缺失值 # 这里用-1作为临时填充值(选业务中不存在的数值即可,避免覆盖真实数据) df_claims['ProviderID'] = df_claims['ProviderID'].fillna(-1).astype('int64').replace(-1, np.nan)
批量处理三列
如果要一次性处理ProviderID、Vender、PCP三列,用循环简化操作:
cols_to_convert = ['ProviderID', 'Vender', 'PCP'] for col in cols_to_convert: # 字符串转数值 df_claims[col] = pd.to_numeric(df_claims[col], errors='coerce') # 处理缺失值并转换类型 df_claims[col] = df_claims[col].fillna(-1).astype('int64').replace(-1, np.nan)
关键说明
pd.to_numeric(..., errors='coerce'):这一步是核心,它能把字符串形式的数字转成真正的数值,同时把所有无效内容(比如空值、非数字字符串)统一转为NaN,避免后续转换报错。- 临时填充值选-1而非0的原因:如果你的业务数据中存在合法的0值,用0填充会覆盖真实数据,选一个业务中不可能出现的数值更安全;如果确定数据里没有0,也可以用0替代-1。
内容的提问来源于stack exchange,提问作者Jaeho Ahn
相关产品推荐
相关产品推荐

