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

如何绕过.at特殊逻辑,将DataFrame赋值至另一DataFrame指定单元格?

解决DataFrame嵌套赋值时.at操作符的问题

当使用.at给单元格赋值DataFrame/Series这类非标量对象时,pandas会触发特殊的解包逻辑,导致无法直接嵌套。以下两种方法可以绕过这个限制:

方法一:使用loc并将DataFrame包装为列表

通过将目标DataFrame放入长度为1的列表中,让pandas将整个对象作为单个元素赋值到单元格:

import pandas as pd

# 示例数据
main_df = pd.DataFrame(index=["foo"], columns=["newCol"])
nested_df = pd.DataFrame({"a": [1,2], "b": [3,4]})

# 赋值操作
main_df.loc["foo", "newCol"] = [nested_df]

方法二:先将目标列转为object类型再用.at赋值

pandas默认会根据列中数据自动推断 dtype,预先将列设置为object类型可以避免pandas对非标量值进行拆解:

import pandas as pd

main_df = pd.DataFrame(index=["foo"], columns=["newCol"])
nested_df = pd.DataFrame({"a": [1,2], "b": [3,4]})

# 转换列类型
main_df["newCol"] = main_df["newCol"].astype(object)
# 使用.at赋值
main_df.at["foo", "newCol"] = nested_df

原理说明

.at和.iat是为快速访问标量值设计的API,当赋值非标量对象时,pandas会尝试将其元素展开以匹配目标位置的形状,导致嵌套失败。而上述两种方法要么明确告诉pandas将对象视为单个元素,要么通过object dtype禁用自动类型推断,从而实现嵌套DataFrame的赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:36