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

Pymongo列表嵌套字典数据导入pandas DataFrame时赋值异常解决

问题原因

你代码中df2["posX"] = y[0]["value"]这类写法是对整列统一赋值,每次循环都会覆盖df2所有行的对应列数值,最后一次循环用到的第三条数据就会覆盖所有行,导致所有行数值都和最后一条一致。

修复方案

方案1:修改原循环逻辑(最易理解)

先把每行的位置数据存入列表,最后一次性转DataFrame,避免反复修改DataFrame的列:

pos_list = []
# 遍历原df所有行
for i in range(len(df)):
    var_list = df.loc[i, 'position.vars']
    pos_list.append([
        var_list[0]['value'],
        var_list[1]['value'],
        var_list[2]['value']
    ])
# 生成结果df2
df2 = pd.DataFrame(pos_list, columns=['posX', 'posY', 'posZ'])

如果一定要沿用逐行给df2赋值的写法,需要指定对应行的索引:

# 先初始化和原df行数相同的空df2
df2 = pd.DataFrame(index=df.index, columns=['posX', 'posY', 'posZ'])
for i in range(len(df)):
    var_list = df.loc[i, 'position.vars']
    df2.loc[i, 'posX'] = var_list[0]['value']
    df2.loc[i, 'posY'] = var_list[1]['value']
    df2.loc[i, 'posZ'] = var_list[2]['value']

方案2:pandas向量化写法(更简洁高效,无需显式写循环)

用apply函数直接处理每行的position.vars字段:

def extract_position(row):
    vars_lst = row['position.vars']
    return pd.Series(
        [vars_lst[0]['value'], vars_lst[1]['value'], vars_lst[2]['value']],
        index=['posX', 'posY', 'posZ']
    )

# 直接生成包含三列位置数据的df2
df2 = df.apply(extract_position, axis=1)

如果需要保留原DataFrame的Time、Returncode字段,直接合并即可:

df = pd.concat([df, df2], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:24:06