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

Python为DataFrame新增列时每行被赋值完整列表的异常问题

问题原因

你的循环逻辑存在本质错误:循环体内计算mean的代码完全没有用到循环索引i,每次执行(df['h1_glucose_max']+df['h1_glucose_min'])/2时,计算得到的不是当前单行的均值,而是长度与DataFrame总行数一致的整列均值Series。
循环执行len(df)次后,你得到的glucose_mean不是存储单个数值的一维列表,而是嵌套了len(df)个Series的二维嵌套列表——虽然它的顶层长度和DataFrame行数一致,但每个元素都是一整列的计算结果,赋值给新列时pandas就会把整个列表对象填充到每一行的单元格中,才会出现单元格存储完整列表的异常效果。

解决方案

pandas原生支持向量化整列运算,不需要写for循环逐行遍历,直接一行代码即可完成计算和赋值,运算效率更高也不会出现对齐错误:

df['glucose'] = (df['h1_glucose_max'] + df['h1_glucose_min']) / 2

如果你出于特殊场景必须使用循环实现(性能比向量化运算低几个数量级,非必要不推荐),需要在循环中显式取当前行的两个字段值计算,不能直接对整列做运算:

glucose_mean = []
for i in range(len(df)):
    row_val_max = df.loc[i, 'h1_glucose_max']
    row_val_min = df.loc[i, 'h1_glucose_min']
    glucose_mean.append((row_val_max + row_val_min)/2)

df['glucose'] = glucose_mean

赋值完成后可以通过print(df[['h1_glucose_max', 'h1_glucose_min', 'glucose']].head())校验结果,每一行的glucose值都会是对应行两个字段的均值,不会再出现单元格存储整个列表的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:33:31