Pandas批量转换浮点列为整数时遇NaN/inf错误的问题
问题分析与修复方案
嘿,我一眼就揪出问题所在啦!你的代码里判断列是否无NaN的逻辑搞反了,这才导致转int时遇到NaN报错。
错误根源
你用了floats.notna().any(),这个方法的含义是:列中至少有一个值不是NaN——哪怕列里还有大量NaN,只要有一个有效值,它就会返回True。所以你的notna变量其实包含了那些部分值是NaN的列,当你尝试把这些列转成int时,自然会因为存在NaN而触发错误。
你真正需要的是floats.notna().all(),这个方法会严格检查列中所有值都不是NaN,只有完全没有NaN的列才会被选中。
修正后的代码
chunk_iter = pd.read_csv(source, chunksize=3000) for chunk in chunk_iter: floats = chunk.select_dtypes(include=['floating'], exclude=None) # 筛选所有浮点类型列 # 改用all():只保留所有值都非NaN的浮点列 notna_cols = floats.columns[floats.notna().all()].tolist() floats[notna_cols] = floats[notna_cols].astype(int) print(f'已将这些列转为整数:{notna_cols}')
额外小提示
如果有些浮点列里有NaN,但你还是想把有效值转成int(比如先处理缺失值),可以先填充NaN再转换,举个例子:
# 示例:用0填充NaN后转int,也可以根据业务需求用均值、中位数等填充 floats_filled = floats.fillna(0).astype(int)
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

