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

如何为Pandas DataFrame单个元素赋值字典类型?(Pandas1.5.3/Python3.9)

Pandas赋值异常问题解析

环境

Pandas 1.5.3、Python 3.9

执行代码

import pandas as pd
test1_pd = pd.DataFrame([[1,2,3]], columns=['a','b','c'])
test2_pd = pd.DataFrame([[1,2,3]], columns=['a','b','c'])
test1_pd.loc[0]['a'] = {'x':1,'y':2}
test2_pd.loc[0]['a'] = 9

执行结果

test1_pd
Out[116]: 
   a  b  c
0  1  2  3

test2_pd
Out[117]: 
   a  b  c
0  9  2  3

问题

为何test1_pd.loc[0]['a']未被字典值{'x':1,'y':2}替换,而test2_pd.loc[0]['a']能成功被9替换?


原因解析

  • 链式索引的本质问题:loc[0]['a']是两次独立的索引操作,第一步loc[0]返回的是原DataFrame单行的副本,而非直接指向原数据的视图。对副本的赋值操作只会作用于副本本身,不会同步到原DataFrame。
  • 数据类型兼容性的影响:
    • test2_pd中赋值的9和原'a'列的int类型一致,此时链式索引的赋值碰巧生效,但这属于Pandas未定义的行为,官方并不推荐依赖这种方式;
    • test1_pd中赋值的字典与原列的int类型完全不兼容,对副本的类型修改无法回写到原DataFrame,因此原数据没有变化。
  • 正确的赋值方式:要安全修改指定位置的值,必须使用单步索引直接定位目标元素,避免链式索引:
    test1_pd.loc[0, 'a'] = {'x':1,'y':2}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:30:00