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

如何在Python中为数值型DataFrame生成bigram与trigram

在整数型DataFrame上生成Bigram和Trigram

问题描述

我需要在整数型的n×m DataFrame上生成二元组(Bigram)和三元组(Trigram),示例DataFrame如下:

1, 2, 3, 4, 5
6, 7, 8, 9, 10
11, 12, 13, 14, 15

尝试了一段代码但无法正常运行:

for i in range(df.shape[0]):
    row = list(str(df.iloc[i,:]))
    print("row:  ", row)
    bigrams = [b for l in row for b in zip(l.split(" ")[:-1], l.split(" ")[1:])]
    print(bigrams)

期望输出示例(以一维列表[10,20,30,40,50,60,...]为例):

  • Bigram:(10,20)(20,30)(30,40)(40,50)...
  • Trigram:(10,20,30)(20,30,40)(30,40,50)...

错误原因

之前的代码错误地将整行数据转为字符串再拆分,导致把数字拆成了单个字符(比如10变成['1','0']),完全偏离了处理数值序列的需求。

解决方案

1. 构造示例DataFrame

import pandas as pd

df = pd.DataFrame([
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15]
])

2. 生成每行的Bigram

直接提取行的数值列表,通过zip将列表与自身偏移一位的列表配对,得到连续二元组:

# 遍历每行生成Bigram
for idx, row in df.iterrows():
    row_vals = row.tolist()
    bigrams = list(zip(row_vals, row_vals[1:]))
    print(f"第{idx+1}行Bigram: {bigrams}")

输出结果:

第1行Bigram: [(1, 2), (2, 3), (3, 4), (4, 5)]
第2行Bigram: [(6, 7), (7, 8), (8, 9), (9, 10)]
第3行Bigram: [(11, 12), (12, 13), (13, 14), (14, 15)]

3. 生成每行的Trigram

同理,通过zip将列表与自身偏移一位、偏移两位的列表配对,得到连续三元组:

# 遍历每行生成Trigram
for idx, row in df.iterrows():
    row_vals = row.tolist()
    trigrams = list(zip(row_vals, row_vals[1:], row_vals[2:]))
    print(f"第{idx+1}行Trigram: {trigrams}")

输出结果:

第1行Trigram: [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
第2行Trigram: [(6, 7, 8), (7, 8, 9), (8, 9, 10)]
第3行Trigram: [(11, 12, 13), (12, 13, 14), (13, 14, 15)]

4. 一维列表的处理方式

如果是一维数值列表(如[10,20,30,40,50,60]),处理逻辑更简洁:

data = [10,20,30,40,50,60]
# 生成Bigram
bigrams = list(zip(data, data[1:]))
# 生成Trigram
trigrams = list(zip(data, data[1:], data[2:]))

print("Bigram:", bigrams)
print("Trigram:", trigrams)

输出结果:

Bigram: [(10, 20), (20, 30), (30, 40), (40, 50), (50, 60)]
Trigram: [(10, 20, 30), (20, 30, 40), (30, 40, 50), (40, 50, 60)]

内容的提问来源于stack exchange,提问作者Mohsen Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:12:09