You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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))

运行后输出:

stringoutput
hellohe, el, ll, lo
worldwo, 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:32:16