如何在Pandas DataFrame中提取字符串的双字母Bigram
Pandas字符串列提取连续双字母组合(字母Bigram)解决方案
错误原因分析
- 方法1/2错误:直接对整个Series调用
zip或ngrams,是将列中相邻行的字符串配对,而非单个字符串内部的字母组合,导致结果长度与原索引不匹配。 - 方法3错误:
re.findall需要传入单个字符串,直接作用于Series会因类型不匹配报错。
正确实现方法
方法1:自定义函数+apply
import pandas as pd def get_letter_bigrams(s): # 处理空字符串或长度<2的情况 if len(s) < 2: return [] return [s[i:i+2] for i in range(len(s)-1)] # 示例DataFrame df = pd.DataFrame({'string': ['hello', 'world', 'a', '']}) df['output'] = df['string'].apply(get_letter_bigrams) # 转为逗号分隔的字符串(匹配示例格式) df['output'] = df['output'].apply(lambda x: ', '.join(x))
运行后输出:
| string | output |
|---|---|
| hello | he, el, ll, lo |
| world | wo, or, rl, ld |
| a | |
方法2:使用nltk的ngrams(需先安装nltk)
import pandas as pd from nltk.util import ngrams def get_letter_bigrams(s): if len(s) < 2: return [] return [''.join(bigram) for bigram in ngrams(s, 2)] df = pd.DataFrame({'string': ['hello', 'world']}) df['output'] = df['string'].apply(get_letter_bigrams).apply(lambda x: ', '.join(x))
关键注意点
- 必须针对每个字符串单独处理字母组合,而非对整个Series操作。
- 加入对短字符串/空字符串的判断,避免索引越界错误。
内容的提问来源于stack exchange,提问作者Will L
相关产品推荐
相关产品推荐

