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
分步拆解验证逻辑(完全匹配你的需求)
- 填充缺失值:
df['Cabin'].fillna('0')把Cabin列的所有NaN替换成字符串'0',避免后续提取首字符时报错 - 提取首字符:
.apply(lambda x: x[0])对每个非空(已填充)的元素取第一个字符,比如原Cabin值是'A10'就取'A',填充后的'0'就取'0' - 转换为分类类型:
pd.Categorical(...)把提取到的首字符集合转换成分类变量,pandas会自动识别所有唯一类别 - 生成数值编码:
.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
相关产品推荐
相关产品推荐

