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

Pandas报错:'Categorical'类型对象无'from_array'属性,求实现缺失值填充、首字符提取及编码转换

解决AttributeError并实现Cabin列的分类编码转换

这个报错的原因很直接:pd.Categorical.from_array方法在新版本的pandas中已经被移除了,现在创建Categorical对象只需要直接调用pd.Categorical()构造函数就可以完美实现你的需求。

修正后的完整代码

df['CabinCat'] = pd.Categorical(df['Cabin'].fillna('0').apply(lambda x: x[0])).codes

分步拆解验证逻辑(完全匹配你的需求)

  1. 填充缺失值:df['Cabin'].fillna('0') 把Cabin列的所有NaN替换成字符串'0',避免后续提取首字符时报错
  2. 提取首字符:.apply(lambda x: x[0]) 对每个非空(已填充)的元素取第一个字符,比如原Cabin值是'A10'就取'A',填充后的'0'就取'0'
  3. 转换为分类类型:pd.Categorical(...) 把提取到的首字符集合转换成分类变量,pandas会自动识别所有唯一类别
  4. 生成数值编码:.codes 把每个分类映射成对应的整数编码,比如'A'可能对应0,'B'对应1,'0'对应N(具体取决于唯一值的出现顺序)

额外健壮性提示

如果担心某些极端情况(比如填充后仍有空字符串),可以把提取首字符的lambda改成更稳妥的写法:

df['CabinCat'] = pd.Categorical(df['Cabin'].fillna('0').apply(lambda x: x[0] if isinstance(x, str) and len(x) > 0 else '0')).codes

不过你的原逻辑里已经用fillna('0')处理了缺失值,基础版本完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:27:39