如何为词ID与词频的Pandas DataFrame添加document_id列并重塑数据
解决数据重塑需求:从文档文本到(docID, wordID, count)格式
没问题,我来帮你把现有的DataFrame转换成你需要的格式!咱们一步步来实现:
步骤1:准备数据与分词
首先,我们需要把每条MESSAGE拆成单个词,同时保留对应的DOCUMENT_ID。这里先按空格拆分文本,顺便清理掉文本末尾的省略号(如果有的话):
import pandas as pd # 你的原始数据集 jsonDF = pd.DataFrame({ 'DOCUMENT_ID':[263403828328665088,264142543883739136], 'MESSAGE':['@Zuora wants to help @Network4Good with Hurric...','@ztrip please help spread the good word on hel...'] }) # 分词并展开每条词记录,关联原DOCUMENT_ID tokenized_df = jsonDF.assign(WORD=jsonDF['MESSAGE'].str.split()).explode('WORD') # 清理词尾的省略号(可选,根据你的数据情况调整) tokenized_df['WORD'] = tokenized_df['WORD'].str.rstrip('...')
步骤2:为每个唯一词分配wordID
接下来,我们给所有出现过的唯一词分配一个专属的wordID,保证每个词对应唯一ID:
# 获取所有唯一词,创建词到ID的映射(ID从1开始,和你示例格式一致) unique_words = tokenized_df['WORD'].unique() word_id_mapping = {word: idx + 1 for idx, word in enumerate(unique_words)} # 将wordID加入到数据框中 tokenized_df['wordID'] = tokenized_df['WORD'].map(word_id_mapping)
步骤3:统计词频并整理成目标格式
最后,我们按文档ID和wordID分组,统计每个词在对应文档中的出现次数,再调整列名到你需要的格式:
# 分组统计词频 final_df = tokenized_df.groupby(['DOCUMENT_ID', 'wordID']).size().reset_index(name='count') # 重命名列名匹配目标格式 final_df = final_df.rename(columns={'DOCUMENT_ID': 'docID'}) # 查看结果 print(final_df)
运行后你会得到类似这样的输出(具体wordID会根据词的顺序生成):
docID wordID count 0 263403828328665088 1 1 1 263403828328665088 2 1 2 263403828328665088 3 1 3 263403828328665088 4 1 4 263403828328665088 5 1 5 263403828328665088 6 1 6 264142543883739136 7 1 7 264142543883739136 8 1 8 264142543883739136 4 1 9 264142543883739136 9 1 10 264142543883739136 10 1 11 264142543883739136 11 1 12 264142543883739136 12 1
可选优化
如果需要更精准的分词(比如处理标点、统一大小写),可以做额外处理:
- 统一词的大小写:
tokenized_df['WORD'] = tokenized_df['WORD'].str.lower() - 使用专业分词工具(如nltk的
word_tokenize):需要先安装nltk,然后替换split步骤为nltk.word_tokenize()
内容的提问来源于stack exchange,提问作者lpt
相关产品推荐
相关产品推荐

