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

Pandas用apply从JSON列取值替换列值时报Series真值模糊错误如何解决

报错原因
  • 核心问题1:你在apply的lambda函数中调用df['json_col'].str['value'].str['Code']返回的是长度等于DataFrame总行数的Series,而按行执行的apply要求每行返回单个值,维度不匹配触发了真值判断歧义的报错。
  • 核心问题2:你先筛选df[df['col1'] == 0]再直接赋值给整列df['col1'],会导致原col1不为0的行(比如示例中的第二行原本为NaN)被错误覆盖为空值。
最优实现方案(无需apply,性能更高)

直接用布尔索引匹配赋值即可,自动兼容Code为NaN、json_col为NaN的场景:

import pandas as pd
import numpy as np

# 先提取所有行的Code值
code_series = df['json_col'].str['value'].str['Code']
# 仅给col1为0的位置赋值对应的Code值
df.loc[df['col1'] == 0, 'col1'] = code_series[df['col1'] == 0]

运行后的df['col1']结果为[6037.0, nan, nan, nan],完全符合需求:

  • 第一行原col1为0,替换为Code值6037
  • 第二行原col1为NaN,保留原值
  • 第三行json_col为NaN,提取Code为NaN,替换原0值为NaN
  • 第四行Code本身为NaN,替换原0值为NaN
可选apply实现方案

如果需要用apply实现,要按行取当前行的字段值,同时做非空判断避免报错:

df['col1'] = df.apply(
    lambda x: x['json_col']['value']['Code'] if x['col1'] == 0 and pd.notna(x['json_col']) else x['col1'],
    axis=1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:48:03