如何遍历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
相关产品推荐
相关产品推荐

