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

Int64类型DataFrame调用to_numpy无法修改原数据,如何向量化修改指定位置值?

问题原因

两种int类型的底层存储逻辑不同导致了修改效果的差异:

  • 原生int64是numpy原生类型,DataFrame底层直接存储连续的numpy数组,to_numpy()默认返回视图,修改返回值会同步到原DataFrame
  • 可空类型pd.Int64Dtype是pandas自定义的扩展数组类型,底层用「值数组+掩码数组」的结构存储,to_numpy()必须做类型转换生成新数组,返回的永远是拷贝,修改自然不会影响原DataFrame

向量化修改方案

直接用pandas原生的iloc索引即可,不需要循环也不需要转numpy数组:

two.iloc[r, c] = 99

该操作本身是向量化实现的,性能远高于for循环,同时兼容所有pandas支持的数据类型(包括各类扩展类型)。

效果验证

执行赋值后打印two即可看到对应位置已被修改:

print(two)

输出:

0   1   2   3   4
0   0  99   2   3   4
1   5   6   7   8  99
2  10  11  12  13  14
3  15  99  17  18  19
4  99  99  22  23  24

补充说明

你使用的pandas 1.3.1版本完全兼容上述索引语法,不需要额外适配。如果需要修改的值和原类型不匹配,pandas会自动做安全类型转换,不会出现隐式类型降级的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:03