如何将Pandas DataFrame列标题转换为多标签分类训练的文本标签?
嘿,这事儿好办!我帮你写个Pandas的处理脚本,完美实现你要的多标签分类数据格式转换。先理清楚逻辑,再上代码和示例:
核心思路
我们要逐行检查A到E这些标签列,把值为1或2(不管是数值型还是字符串型)的列标题收集起来,作为对应Content文本的标签列表,最后生成只保留Content和Labels的目标DataFrame。
完整代码示例
先拿一个模拟的输入DataFrame来演示,你可以直接替换成自己的真实数据:
import pandas as pd # 模拟输入数据(替换成你的真实DataFrame即可) df_input = pd.DataFrame({ 'Content': ['周末去爬山', '在家看电影', '健身房撸铁'], 'A': ['1', '', 2], 'B': ['2', 1, ''], 'C': ['', '', ''], 'D': [1, '', '2'], 'E': ['', 2, 1] }) # 定义函数:提取当前行的有效标签 def extract_labels(row): valid_labels = [] # 遍历所有标签列(排除Content列) for label_col in df_input.columns.drop('Content'): cell_value = row[label_col] # 处理空值和类型问题,判断是否为有效标签值 if str(cell_value).strip() in ['1', '2']: valid_labels.append(label_col) return valid_labels # 生成Labels列 df_output = df_input.copy() df_output['Labels'] = df_output.apply(extract_labels, axis=1) # 只保留需要的Content和Labels列 df_output = df_output[['Content', 'Labels']] # 查看结果 print(df_output)
运行结果
运行上面的代码后,你会得到这样的目标DataFrame:
Content Labels 0 周末去爬山 [A, B, D] 1 在家看电影 [B, E] 2 健身房撸铁 [A, D, E]
关键细节说明
- 兼容多种数据类型:用
str(cell_value).strip()把单元格值转成字符串并去除空格,不管是数值1/2还是字符串'1'/'2',甚至带空格的' 2 '都能被正确识别。 - 通用化标签列处理:用
df_input.columns.drop('Content')获取所有标签列,哪怕你的标签列不是A-E而是其他名字,这段代码也能正常工作。 - 空标签处理:如果某一行所有标签列都不符合条件,
Labels会是空列表[],保证和Content的长度完全一致,不会影响后续分类器训练。
内容的提问来源于stack exchange,提问作者mvx
相关产品推荐
相关产品推荐

