如何为Pandas DataFrame添加拆分review生成的多行与两列?
解决方案
你需要把每条评论生成的多段子片段转换成多行数据,最直接的方式是先收集所有子片段记录,再转换成DataFrame。另外可以优化你的字符串拼接逻辑,用str.join()替代循环,效率更高。
方法一:列表收集记录后转DataFrame
import pandas as pd # 初始化空列表存储所有子片段记录 result_rows = [] # 遍历每条评论 for idx, review in correct_X_test['review'].items(): words = review.split() # 对每个单词位置生成对应子片段 for i in range(len(words)): sub_review_1_i = ' '.join(words[:i+1]) sub_review_i_n = ' '.join(words[i:]) # 将记录加入列表,可选择保留原评论或其他字段 result_rows.append({ 'original_review': review, # 可选,保留原评论便于溯源 'sub_review_1_i': sub_review_1_i, 'sub_review_i_n': sub_review_i_n }) # 转换为最终DataFrame expanded_df = pd.DataFrame(result_rows)
方法二:Pandas apply + explode 实现(更简洁)
这种方法避免显式循环,更贴合Pandas的向量化操作风格:
import pandas as pd def generate_sub_reviews(review): words = review.split() sub_reviews = [] for i in range(len(words)): sub_reviews.append({ 'sub_review_1_i': ' '.join(words[:i+1]), 'sub_review_i_n': ' '.join(words[i:]) }) return sub_reviews # 生成子片段列表并展开为多行 expanded_df = correct_X_test['review'].apply(generate_sub_reviews).explode().apply(pd.Series) # 若需保留原DataFrame的其他列,可合并回去 expanded_df = pd.concat([correct_X_test.loc[expanded_df.index].reset_index(drop=True), expanded_df.reset_index(drop=True)], axis=1)
补充说明
- 两种方法都会把单条评论拆分成
n行(n为评论的单词数量),每行对应一个i位置的子片段组合。 str.join()比你原有的循环拼接效率高,还能避免末尾多余空格;如果需要和原代码一样保留末尾空格,可改为' '.join(...) + ' '。
内容的提问来源于stack exchange,提问作者SLA
相关产品推荐
相关产品推荐

