使用df.at向pandas DataFrame单元格存储数组触发ValueError如何解决
报错原因
你初始化DataFrame时,A列的默认数据类型为整数型,pandas会校验赋值内容与列类型的匹配性,你要写入的多维数组无法转换为单个整数,因此抛出ValueError: setting an array element with a sequence。
解决方案(保留使用df.at的要求)
你只需要先将目标列的数据类型显式转换为object(object类型列支持存储任意Python对象,包括numpy数组),再执行赋值操作即可,修改后的完整代码如下:
import numpy as np import pandas as pd arr = np.array([[123, 123], [123, 123]], dtype=int) df = pd.DataFrame(data= [[1, 2], [3, 4]], columns=["A", "B"]) # 新增行:将A列转为object类型 df['A'] = df['A'].astype(object) # 保留原有的df.at赋值逻辑 df.at[0, "A"] = arr # 验证赋值结果 print(df.at[0, "A"])
如果你不想显式声明整列类型,也可以先给目标位置赋值为None触发pandas自动转换列类型为object,再赋值数组:
import numpy as np import pandas as pd arr = np.array([[123, 123], [123, 123]], dtype=int) df = pd.DataFrame(data= [[1, 2], [3, 4]], columns=["A", "B"]) # 先给目标位置赋值为None,触发列类型自动转换为object df.at[0, "A"] = None # 再赋值数组 df.at[0, "A"] = arr
注意事项
将数组存储在DataFrame单元格后,后续做列级批量数值运算时需要额外做类型适配,避免出现预期外的错误。
内容的提问来源于stack exchange,提问作者anxiousPI
相关产品推荐
相关产品推荐

