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

如何为Pandas DataFrame的JSON格式列添加新键?

解决Pandas中为JSON列添加键值对的语法错误问题

问题场景

现有如下Pandas DataFrame:

import pandas as pd                                                                         
technologies = [                                                                            
            ("Spark", 22000,'30days',1000.0),                                               
            ("PySpark",25000,'50days',2300.0),                                              
            ("Hadoop",23000,'55days',1500.0)                                                
            ]                                                                               
df = pd.DataFrame(technologies,columns = ['Courses','Fee','Duration','Discount'])           

执行以下代码为DataFrame添加json列(值为JSON格式字符串):

import json
df['json'] = [json.dumps(x) for x in df.to_dict(orient='records')]

此时想为json列的每个JSON对象添加'madeby'键(值为'Bae Systems'),但执行以下代码时出现语法错误:

df.apply(lambda row: json.loads(row['json'])['madeby'] = 'Bae Systems',axis=1)
# 报错:SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

错误原因

lambda匿名函数只能包含单个表达式,不能包含赋值语句(=),因此直接在lambda里做键值赋值会触发语法错误。

解决方案

方法1:使用自定义函数配合apply

定义一个普通函数完成JSON解析、添加键、重新序列化的完整流程,再应用到json列:

import json

def add_madeby_field(json_str):
    # 解析JSON字符串为字典
    data_dict = json.loads(json_str)
    # 添加新键值对
    data_dict['madeby'] = 'Bae Systems'
    # 重新序列化为JSON字符串
    return json.dumps(data_dict)

# 更新json列
df['json'] = df['json'].apply(add_madeby_field)

方法2:用表达式形式的lambda实现

利用字典解包生成新字典,将赋值操作转化为表达式,适配lambda的要求:

df['json'] = df['json'].apply(lambda x: json.dumps({**json.loads(x), 'madeby': 'Bae Systems'}))

方法3:从源头优化(更高效)

无需先生成JSON再修改,直接在生成JSON列时就添加目标键值对,避免重复解析序列化的开销:

df['json'] = [json.dumps({**record, 'madeby': 'Bae Systems'}) for record in df.to_dict(orient='records')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:48:21