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

如何遍历values列表优化Pandas DataFrame构建代码?

Pandas代码简化:遍历values生成DataFrame的正确实现

你的问题出在两个核心点:一是用[[...]]*len(values)会导致所有列引用同一个列表,且推导式里的条件值没有动态替换;二是错误地在列表推导式内部嵌套for i in values,引发变量作用域冲突。

正确实现方式

直接使用字典推导式,对values中的每个值生成对应的列数据:

values = [10, 20, 30, 40, 50, 60, 70]
# 字典推导式:每个value对应筛选后的B列值列表
data_dict = {
    val: [sheet['B' + str(item)].value for item in range(6,29) 
          if sheet['A' + str(item)].value == val]
    for val in values
}
pd_table = pd.DataFrame(data_dict, index=['10.08', '20.08', '30.08'])

进一步优化(减少重复IO操作)

如果sheet是Excel工作表对象(比如openpyxl的sheet),重复访问sheet['A'+str(item)]会增加IO开销,可以先一次性提取A、B列的目标范围数据,再做筛选:

values = [10, 20, 30, 40, 50, 60, 70]
# 一次性提取A、B列的目标范围数据
range_items = range(6,29)
col_a = [sheet['A' + str(item)].value for item in range_items]
col_b = [sheet['B' + str(item)].value for item in range_items]

# 基于已提取的数据生成字典
data_dict = {val: [b for a, b in zip(col_a, col_b) if a == val] for val in values}
pd_table = pd.DataFrame(data_dict, index=['10.08', '20.08', '30.08'])

错误原因说明

你之前尝试的sheet['A' + str(item)].value == i for i in values写法逻辑错误——列表推导式的条件里不能直接嵌套这种循环,i在推导式内部无法正确绑定到当前遍历的values元素。再加上[[...]]*len(values)只是复制同一个列表的引用,所有列都会是相同内容,根本没有实现按values筛选的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:13:14