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

如何使用数值数组批量更新Pandas DataFrame的指定列?

问题:将数值数组更新到Pandas DataFrame中

需求说明

我有一个Pandas DataFrame和一个数值数组,想要把数组的数据更新到DataFrame中,具体示例如下:

输入

DataFrame:

Time | 1 | 2 | 3 | 4 | 5 |
prod1| 0 | 0 | 0 | 0 | 0 |
prod2| 0 | 0 | 0 | 0 | 0 |
prod3| 0 | 0 | 0 | 0 | 0 |

数组:

productList = [3,4,5]

输出

Time | 1 | 2 | 3 | 4 | 5 |
prod1| 0 | 0 | 3 | 3 | 3 |
prod2| 0 | 0 | 4 | 4 | 4 |
prod3| 0 | 0 | 5 | 5 | 5 |

我的尝试代码

import pandas as pd
import numpy

Product_matrix = pd.DataFrame(index=['Prod1','Prod2','Prod3','Prod4','Prod5'], columns=[x for x in range(1,30)])
Product_matrix[:] = 0

a = Product_matrix
b = numpy.transpose([6,5,7,0,0])
a.iloc[:,3:6] = [x + b for x in a.iloc[:,3:6]]
print(a)

解决方案

核心思路

利用Pandas的广播机制,将一维数组转换为匹配DataFrame行维度的二维列向量,直接赋值到目标列区间,避免错误的循环操作。

针对示例需求的实现代码

import pandas as pd
import numpy as np

# 初始化示例DataFrame
df = pd.DataFrame(
    [[0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0]],
    index=['prod1', 'prod2', 'prod3'],
    columns=[1,2,3,4,5]
)

productList = [3,4,5]

# 方法1:手动构造每行重复的列表
df.iloc[:, 2:] = [[val]*3 for val in productList]

# 方法2:利用numpy重塑数组实现广播(更简洁)
# df.iloc[:, 2:] = np.array(productList).reshape(-1, 1)

print(df)

修复你的尝试代码

你的代码问题在于循环迭代的是DataFrame的列,导致维度不匹配。修改后如下:

import pandas as pd
import numpy as np

Product_matrix = pd.DataFrame(index=['Prod1','Prod2','Prod3','Prod4','Prod5'], columns=[x for x in range(1,30)])
Product_matrix[:] = 0

# 将数组转为二维列向量,匹配行维度
b = np.array([6,5,7,0,0]).reshape(-1, 1)
# 赋值到第4至第6列(iloc[:,3:6]对应列索引3、4、5)
Product_matrix.iloc[:,3:6] = b

print(Product_matrix)

内容的提问来源于stack exchange,提问作者Kang H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:12:09