Pandas中将存储列表的labels列转换为整数类型报错如何解决?
错误原因
你的labels列每个单元格存储的是字符串形式的数字列表,而非单个数字的字符串,直接调用astype(int)会尝试将[0, 1, 0, 0]这一整个字符串转换为单个整数,不符合整数格式要求,因此抛出报错。
解决方法
根据你后续使用标签的场景,选择对应处理方案:
- 场景1:多标签分类需要将标签拆分为独立的布尔列使用
import ast import pandas as pd # 先将字符串格式的列表转为真实的Python列表 train_df["labels"] = train_df["labels"].apply(ast.literal_eval) # 扩展为多列标签,列名可根据实际需求修改 train_df[["label_0", "label_1", "label_2", "label_3"]] = train_df["labels"].apply(pd.Series) # 可选:删除原始的labels列 train_df.drop("labels", axis=1, inplace=True)
- 场景2:训练代码支持直接传入列表作为标签,仅需要将列表内的元素转为整数
import ast train_df["labels"] = train_df["labels"].apply( lambda x: list(map(int, ast.literal_eval(x))) )
注意事项
ast.literal_eval仅会解析Python字面量结构,比直接使用eval()处理数据的安全性高,优先选择该方法做字符串列表的转换。
内容的提问来源于stack exchange,提问作者Angelos Zinonos
相关产品推荐
相关产品推荐

