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

pandas DataFrame通过iloc赋值后打印仍显示全0问题求解

问题根源

  • 你使用的Pack_Dist.iloc[0][i]属于pandas链式索引,这种连续两次取值的操作通常返回的是原DataFrame的副本,你对副本的修改不会同步到原始的Pack_Dist对象上,所以打印出来仍为初始全0值。
  • 额外提醒:[[0]*4]*5是浅拷贝写法,5个内部列表指向同一个内存地址,直接修改嵌套列表会出现一处修改多处生效的问题,转成DataFrame后该影响会被消除,也可以替换为[[0]*4 for _ in range(5)]从根源避免浅拷贝问题。

解决方法

将所有赋值语句的链式索引改为iloc[行索引, 列索引]的单次索引写法,直接修改原DataFrame:

import pandas as pd

# 初始化替换为深拷贝写法避免潜在问题,原写法也可正常使用
Pack_Perc = [[0]*4 for _ in range(5)]
Pack_Dist = pd.DataFrame(Pack_Perc)
for i in range(4):
    Pack_Dist.iloc[0, i] = my_data.iloc[i+1, 9]
    Pack_Dist.iloc[1, i] = my_data.iloc[i+1, 11]
    Pack_Dist.iloc[2, i] = my_data.iloc[i+1, 13]
    Pack_Dist.iloc[3, i] = my_data.iloc[i+1, 15]
    Pack_Dist.iloc[4, i] = my_data.iloc[i+1, 17]

print(Pack_Dist)

可选优化

可以直接批量提取数据赋值,省略循环,效率更高:

Pack_Dist = my_data.iloc[1:5, [9,11,13,15,17]].T.reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:00