如何用.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
相关产品推荐
相关产品推荐

