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

如何修改pandas dataframe中存储列表的单元格的值?

报错原因

pandas 使用loc对过滤后的行序列赋值时,会默认将传入的可迭代对象拆分,逐行匹配赋值。你传入的[4,5,6]长度为3,但过滤条件df['x']==1匹配到的行只有1行,长度不匹配,因此抛出对应错误。而at是针对单个单元格赋值的方法,不会做可迭代对象的拆分,所以之前的写入操作可以正常执行。

修复方案

方案1:外层包裹列表适配赋值逻辑

将需要存入单元格的列表再套一层列表,让外层可迭代对象的长度和匹配到的行数一致,pandas 会将内层列表作为单个值写入对应单元格:

df.loc[df['x']==1,'list'] = [[4,5,6]]

如果你的过滤条件可能匹配到N行,只需要把外层列表重复N次即可:

# 示例:匹配到3行,给所有行都存入[4,5,6]
df.loc[df['x']>0,'list'] = [[4,5,6]] * len(df[df['x']>0])

方案2:先取索引再用at赋值

如果每次过滤匹配到的只有一行,可以先拿到对应行的索引,再用at执行单个单元格赋值,逻辑更清晰:

# 获取匹配行的索引
match_idx = df[df['x'] == 1].index[0]
# 赋值
df.at[match_idx, 'list'] = [4,5,6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:10