pandas中如何将特定文本列提取的分词作为新数据框的列标签
实现词存在性特征矩阵的调整方法
你的代码只差一步就能实现目标:把特征矩阵转成DataFrame时,将之前统计得到的分词列表指定为列名,替换掉默认的数字索引列名。
具体修改点
- 保留原有分词统计逻辑,拿到存储所有分词的列表
df_word_count - 将生成的全零矩阵转成DataFrame时,新增
columns参数绑定分词列表:
原拼接代码:
修改为:Complete_data=pd.concat([df,pd.DataFrame(allfeatures)],axis=1)# 给特征矩阵的每一列绑定对应分词列名 feature_df = pd.DataFrame(allfeatures, columns=df_word_count) # 再执行和原数据框的拼接 Complete_data=pd.concat([df, feature_df], axis=1) - 可以顺带修正原有循环的逻辑偏差:原循环中用
split().count()统计的是词在单一行的出现次数,不是要求的“存在即标记1”的二值结果,如果同一行出现重复分词,会出现大于1的数值。把循环内的赋值行调整为二值判断即可:
原循环赋值:
修改为:allfeatures[:,i]=df['A'].agg(lambda x:x.split().count(df_word_count[i]))allfeatures[:,i] = df['A'].apply(lambda x: 1 if df_word_count[i] in x.split() else 0)
简化实现方案
不需要手动初始化全零矩阵、写循环遍历的话,可以直接用字典推导式一步生成二值特征矩阵,代码更简洁:
# 复用之前统计得到的分词列表 vocab = df_word_count # 逐词判断每一行的文本中是否存在该词,生成二值特征 feature_df = pd.DataFrame({ word: df['A'].apply(lambda row_text: 1 if word in row_text.split() else 0) for word in vocab }) # 拼接原数据框,得到最终结果 Complete_data = pd.concat([df, feature_df], axis=1)
运行上述代码后,新增的特征列会直接以分词本身作为列名,完全匹配你期望的输出结构。
内容的提问来源于stack exchange,提问作者JiJoik
相关产品推荐
相关产品推荐

