如何用Pandas按固定词数拆分未知列数的字符串列?
这问题我之前也遇到过,用Pandas处理这种按固定个数分组拆分的需求其实很简单,咱们一步步来实现:
步骤1:准备示例数据(如果你的DataFrame已经存在,这步可以跳过)
先构造你给出的示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'Text': [ 'He codes', 'He codes well in python', 'Python is great language', 'Pandas package is very handy' ] })
步骤2:定义分组拆分逻辑
我们需要把每个字符串拆成单词后,每2个词合并成一个新的字符串,最后剩下的单个词就单独成一组。可以写个小函数来处理:
def pair_words(text): words = text.split() # 按步长2遍历单词列表,每2个词合并一次 return [' '.join(words[i:i+2]) for i in range(0, len(words), 2)]
步骤3:应用函数并转换为DataFrame
把这个函数应用到Text列上,得到每个元素对应的分组列表,再把这些列表转换成新的DataFrame:
# 应用函数得到分组后的列表Series grouped_series = df['Text'].apply(pair_words) # 转换为DataFrame,自动补全NaN result_df = pd.DataFrame(grouped_series.tolist(), index=df.index)
最终结果
运行完上面的代码后,result_df就是你想要的结果:
0 1 2 0 He codes NaN NaN 1 He codes well in python 2 Python is great language NaN 3 Pandas package is very handy
如果你想更简洁一点,也可以把函数写成lambda表达式,一步到位:
result_df = pd.DataFrame( df['Text'].apply(lambda x: [' '.join(x.split()[i:i+2]) for i in range(0, len(x.split()), 2)]).tolist(), index=df.index )
原理其实很简单:先用split()把字符串拆成单词列表,然后用步长为2的range来切片,每次取2个单词合并,最后把所有列表转换成DataFrame时,Pandas会自动为长度不足的行填充NaN,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者Tushar Agrawal
相关产品推荐
相关产品推荐

