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

解决Pandas DataFrame单元格赋值长度为1的numpy数组后无法使用len()的问题

问题分析

当给Pandas DataFrame的单个单元格赋值长度为1的numpy数组时,Pandas会自动执行维度缩减,将1维数组转换为0维的numpy标量(类型仍为numpy.ndarray,但无尺寸信息,无法用len()获取长度)。而批量赋值时,Pandas会保留数组的1维结构,因此len()可正常使用。

解决方案

要避免单个单元格赋值时的维度缩减,只需将单个索引包装为列表,以批量赋值的方式处理,让Pandas保留数组的原始维度:

import pandas as pd
import numpy as np

# 初始化DataFrame并转为object类型
df = pd.DataFrame(np.nan, columns=["A","B","C"], index=np.arange(5))
df = df.astype(object)

# 用列表包裹索引,以批量赋值方式存入长度为1的数组
df.loc[[2], 'A'] = [np.arange(1)]

# 验证结果
print(df)
print(type(df.loc[2, 'A']))
print(len(df.loc[2, 'A']))

输出结果

A    B    C
0  NaN  NaN  NaN
1  NaN  NaN  NaN
2  [0]  NaN  NaN
3  NaN  NaN  NaN
4  NaN  NaN  NaN
<class 'numpy.ndarray'>
1
补充说明

也可以通过显式保持数组维度的方式实现,比如使用np.expand_dims将数组转为二维,但上述方法更简洁直观:

df.loc[2, 'A'] = np.expand_dims(np.arange(1), axis=0)
# 此时单元格为二维数组,len()返回行数1,若需获取原长度可使用df.loc[2, 'A'].size

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:07:11