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

如何阻止Python Pandas将指定int列导出时自动转换为float类型

问题原因

你之前的操作未生效,核心是从数据库读取数据时,如果CID1、CID2列存在空值,pandas原生int类型不支持缺失值存储,会自动向上转型为float64类型。此时直接全量执行astype(str)会把整数值转为1234.0这类带小数点后缀的字符串,导出后自然不符合预期。

解决方案

方案1:使用Nullable Int类型处理(支持存在空值的场景)

pandas提供首字母大写的Int64类型(可空整数类型),既支持存储缺失值,又能保留整数格式,处理后再转字符串或直接导出都不会出现小数点后缀。

import pandas as pd
# 读取原始数据
data = pd.read_sql(sql, conn)
# 单独处理两列为可空整数类型
data['CID1'] = data['CID1'].astype('Int64')
data['CID2'] = data['CID2'].astype('Int64')
# 如需所有列转为字符串,再执行全量转换,此时两列不会带.0后缀
data = data.astype(str)
# 导出时新增na_rep参数,可将空值输出为空字符串,避免出现nan/NA内容
data.to_csv('data_feed_feed.txt', sep='\t', index=True, na_rep='')

方案2:直接转int处理(仅适用于两列无空值的场景)

如果确认CID1、CID2不存在空值,可以直接将两列先转int再转字符串即可:

import pandas as pd
data = pd.read_sql(sql, conn)
# 单独处理目标列
data['CID1'] = data['CID1'].astype(int).astype(str)
data['CID2'] = data['CID2'].astype(int).astype(str)
# 其余列转字符串
other_cols = [col for col in data.columns if col not in ['CID1', 'CID2']]
data[other_cols] = data[other_cols].astype(str)
# 导出
data.to_csv('data_feed_feed.txt', sep='\t', index=True)
注意事项
  • 如果你不需要其余列必须为字符串格式,可以不用全量执行astype(str),处理完目标列后直接导出即可,to_csv会默认按整数格式输出Int64类型的列
  • 导出时添加na_rep参数可以自定义空值的输出内容,避免导出后出现不符合要求的nan/<NA>标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:45:03