Pandas 2.2.1中设置不兼容dtype报错,循环处理是否为唯一解法?
Pandas 2.2.1中类型不兼容赋值的FutureWarning解决方法
问题原因
Pandas 2.2.0+版本对不同数据类型的切片赋值操作做了更严格的校验:直接用iloc位置切片将float类型数据赋值给原本是int64类型的列时,会触发FutureWarning,提示类型不兼容,未来版本会直接报错。
高效解决方案(无需循环)
循环单列处理确实可行但效率偏低,以下两种向量化方法更高效:
方法1:使用列名索引直接赋值
直接通过列名选中目标列,赋值转换后的数据,Pandas会自动处理列的数据类型更新,不会触发警告:
import pandas as pd data = { 'Id': ['id1', 'id2', 'id3', 'id4'], 'col1': [41, 41, 41, 41], 'col2': [6, 6, 6, 6] } df = pd.DataFrame(data) # 用列名索引替代iloc完成赋值 df[df.columns[1:]] = df.iloc[:,1:].astype(float).div(150)
方法2:使用df.update()方法
先创建转换后的子DataFrame,再用update方法同步到原DataFrame,属于高效的向量化操作:
import pandas as pd data = { 'Id': ['id1', 'id2', 'id3', 'id4'], 'col1': [41, 41, 41, 41], 'col2': [6, 6, 6, 6] } df = pd.DataFrame(data) # 生成转换后的子数据集 temp_df = df.iloc[:,1:].astype(float).div(150) # 更新原DataFrame df.update(temp_df)
方法可行性说明
- 列名索引赋值时,Pandas会识别到目标列需要更新数据类型,自动完成转换,规避类型不兼容校验;
update方法会匹配列名同步数据,同时允许修改列的数据类型,是Pandas推荐的安全更新方式。
内容的提问来源于stack exchange,提问作者Victor Hartman
相关产品推荐
相关产品推荐

