如何绕过.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
相关产品推荐
相关产品推荐

