Pandas read_csv如何强制指定列数据类型并将NaN替换为空值
报错原因
原生int类型在Pandas中不支持空值存储,当列中存在NaN时Pandas会自动将列类型推导为float64,强制转换为普通int就会触发你遇到的报错。Pandas 1.0及以上版本提供了可空整数类型(首字母大写的Int8/Int16/Int32/Int64),支持空值存储,完全符合你的需求。
解决方案
方案1:读取后手动转换
不要转成小写的int,直接转成可空Int64类型即可,空值会自动转为Pandas内置的pd.NA(等价于你需要的NULL效果,不会填充为0):
# 单列转换 df['min2'] = df['min2'].astype('Int64') df['min3'] = df['min3'].astype('Int64')
方案2:读取CSV时直接指定类型,避免事后转换
调用read_csv时传入dtype参数,直接指定对应列的类型为可空整数,一步到位:
dtype_map = { "min2": "Int64", "min3": "Int64" # 其他需要指定类型的列也可以补充到这个字典里 } df = pd.read_csv('test_data.csv', delimiter=',', index_col=False, dtype=dtype_map)
方案3:批量处理所有min开头的数值列
如果有大量规则命名的min列,可以批量匹配转换,不用逐个写列名:
import re # 匹配所有min+数字格式的列名 min_cols = [col for col in df.columns if re.fullmatch(r'min\d+', col)] df[min_cols] = df[min_cols].astype('Int64')
转换完成后可以用df.dtypes查看列类型,空值位置会显示为<NA>,不会转为0,也不会影响后续的数值计算逻辑。
内容的提问来源于stack exchange,提问作者WJ.Lesster
相关产品推荐
相关产品推荐

