为什么对DataFrame中object类型列使用.str访问器切片时报AttributeError?
报错原因
你遇到的报错本质原因是:astype('object')仅修改列的整体数据类型标记为object,不会将列内的数值型元素自动转换为字符串类型。此时User Mobile New Etl列虽然dtype显示为object,但内部元素仍为整数,因此无法调用仅支持字符串值的.str访问器。
你添加的errors="ignore"参数是用于控制csv读取过程中的解析错误处理逻辑,不会强制将数值类型的手机号列读取为字符串,因此无法解决问题。
可行解决方案
- 方案1:读取文件时直接指定手机号列为字符串类型,从源头避免数值转换
users = pd.read_csv("hotel_users.csv", dtype={"User Mobile New Etl": str}) users = users.sort_values(by="User Mobile New Etl") users.iloc[:,0] = users["User Mobile New Etl"].str[:3]
- 方案2:切片操作前直接将列元素转换为字符串类型,而非仅转换为object类型
users = pd.read_csv("hotel_users.csv") users = users.sort_values(by="User Mobile New Etl") users.iloc[:,0] = users["User Mobile New Etl"].astype(str).str[:3]
- 方案3:如果列中存在空值,可以先做空值填充避免转换异常
users = pd.read_csv("hotel_users.csv") users = users.sort_values(by="User Mobile New Etl") users.iloc[:,0] = users["User Mobile New Etl"].fillna('').astype(str).str[:3]
内容的提问来源于stack exchange,提问作者Sohrab Salehin
相关产品推荐
相关产品推荐

