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

如何用.astype将DataFrame部分列从float转int?np计算报错求助

解决方案:仅转换DataFrame指定列为整数类型

嘿,其实你用的astype()方法本身就支持只转换指定列,不用整个DataFrame都转~我给你整理了两种实用的方法,结合你的数据示例来演示:

方法1:直接针对指定列操作

假设你的DataFrame名叫df,要转换volume和volatility这两列,直接这样写就行:

# 对指定列应用astype()转换为整数
df[['volume', 'volatility']] = df[['volume', 'volatility']].astype(int)

这里要注意:astype(int)会直接截断小数部分(比如你的3.464018e+08会变成346401800),如果需要先四舍五入再转整数,可以先套一层round():

# 先四舍五入再转换整数
df[['volume', 'volatility']] = df[['volume', 'volatility']].round().astype(int)

方法2:用字典映射实现多列不同类型转换

如果后续需要同时给不同列设置不同类型(比如有的转int,有的保持float),可以用字典传参给astype(),更灵活:

# 键是列名,值是目标数据类型
df = df.astype({'volume': int, 'volatility': int})

再聊聊你提到的科学计数法和numpy的"number is finite not infinite"错误:

其实科学计数法只是Pandas的显示格式问题,你的数值本身是有效的有限浮点数,并不是无限值。不过转成整数后确实能规避一些浮点数精度相关的numpy计算问题。

如果转换后还是碰到这个错误,可以先排查下这些列里有没有NaN或者无限值(inf/-inf),用下面的代码就能快速检查:

# 检查指定列是否存在空值
print(df[['volume', 'volatility']].isna().any())
# 检查指定列是否所有值都是有限值
print(np.isfinite(df[['volume', 'volatility']]).all())

如果发现有NaN,转整数前得先处理(比如用fillna()填充),因为普通整数类型存不了NaN,Pandas会自动把列转为Int64(支持空值的整数类型):

# 填充空值后转支持空值的整数类型
df[['volume', 'volatility']] = df[['volume', 'volatility']].fillna(0).astype('Int64')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:38:03