如何将DataFrame文本列按固定词数拆分至多行?
将Pandas DataFrame文本列按指定单词数拆分为多行
问题场景
现有如下Pandas DataFrame:
import pandas as pd data = [ ["a", "Lorem ipsum dolor sit amet, consectetur adipiscing elit."], ["b", "Etiam imperdiet fringilla est, eu tristique risus varius vitae."] ] df = pd.DataFrame(data, columns=['name', 'text'])
原始DataFrame输出:
name text 0 a Lorem ipsum dolor sit amet, consectetur adipiscing elit. 1 b Etiam imperdiet fringilla est, eu tristique risus varius vitae.
需要将text列的字符串按每行3个单词拆分为多行,拆分后保留原行的name列数据,最后一行若剩余单词不足3个也正常保留,期望得到如下结果:
name text 0 a Lorem ipsum dolor 1 a sit amet, consectetur 2 a adipiscing elit. 3 b Etiam imperdiet fringilla 4 b est, eu tristique 5 b risus varius vitae.
解决方案
通过文本分组+行展开的方式实现,具体步骤如下:
- 自定义函数,将单条文本拆分为单词列表后,按每3个单词一组拼接成新字符串;
- 对
text列应用该函数,生成分组后的字符串列表; - 使用
explode()方法将列表展开为多行,并重置索引。
完整代码
import pandas as pd data = [ ["a", "Lorem ipsum dolor sit amet, consectetur adipiscing elit."], ["b", "Etiam imperdiet fringilla est, eu tristique risus varius vitae."] ] df = pd.DataFrame(data, columns=['name', 'text']) # 自定义分组函数:按n个单词为一组拆分文本 def split_by_word_count(text, n=3): words = text.split() # 按步长n分割单词列表,拼接为字符串 return [' '.join(words[i:i+n]) for i in range(0, len(words), n)] # 应用函数生成分组后的列表,再展开为多行 df['text'] = df['text'].apply(split_by_word_count) result_df = df.explode('text').reset_index(drop=True) print(result_df)
代码说明
split_by_word_count函数:先通过split()将文本拆分为单词列表,再用列表推导式按每3个单词为一组拼接成新字符串;explode()方法:将列中的列表元素逐个展开为单独的行,同时保留其他列的对应值;reset_index(drop=True):重置索引,避免展开后出现重复索引。
内容的提问来源于stack exchange,提问作者ClaudiaR
相关产品推荐
相关产品推荐

