Pandas 1.4.2与2.1.4批量列类型转换差异原因及兼容方案
问题解决与原因说明
1. 兼容两个版本的单行修改代码
将原赋值语句替换为以下任意一种写法即可:
df.iloc[:,1:3] = df.iloc[:,1:3].astype('int32').values
或者更直观的列名定位写法:
df[df.columns[1:3]] = df[df.columns[1:3]].astype('int32')
2. 版本差异的原因
Pandas 1.4.2中,对DataFrame切片赋值时会自动执行隐式类型转换:只要右侧数据能兼容目标列,就会直接修改目标列的 dtype 以匹配右侧数据,所以float64列能顺利转为int32。
而Pandas 2.0及后续版本(含2.1.4)重构了赋值逻辑,强化了类型一致性检查:当右侧数据的 dtype 与目标列原有 dtype 不匹配时,赋值操作会自动将右侧数据转换回目标列的原有类型(此处就是把int32转回float64),导致列类型看起来没有变化。这一变更的核心目的是避免隐式类型转换带来的意外数据变动,让类型变更操作更显式、可控。
内容的提问来源于stack exchange,提问作者Johnny C.
相关产品推荐
相关产品推荐

