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

如何将NLTK生成的二元组频率字典按两列写入CSV文件?

修复二元组写入CSV的列拆分问题

问题根源

你用frequency.most_common(100)拿到的是((word1, word2), count)格式的元组列表,直接丢给Pandas的DataFrame时,整个二元组会被当成word列的单个单元格值,最终导致CSV里所有内容挤在同一列。

解决方案1:用Pandas拆分二元组为独立列

如果希望把二元组的两个词分成两列(比如A列word1、B列word2、C列count),可以拆分二元组列:

import pandas as pd
from nltk import FreqDist

# 假设已生成frequency = FreqDist(bigrams)
common = frequency.most_common(100)

# 先把元组列表转成DataFrame
df = pd.DataFrame(common, columns=['bigram', 'count'])
# 拆分二元组为两个独立列
df[['word1', 'word2']] = pd.DataFrame(df['bigram'].tolist(), index=df.index)
# 调整列顺序并移除原bigram列
df = df[['word1', 'word2', 'count']]
# 写入CSV
df.to_csv("output.csv", index=False)

解决方案2:直接用csv模块写入(无需Pandas)

如果不想依赖Pandas,用原生csv模块更直接,手动拆分二元组写入:

import csv
from nltk import FreqDist

# 假设已生成frequency = FreqDist(bigrams)
common = frequency.most_common(100)

with open("output.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(["word1", "word2", "count"])
    # 遍历每个二元组和计数,逐行写入
    for (word1, word2), count in common:
        writer.writerow([word1, word2, count])

补充:若需保留二元组为单独一列

如果你确实希望A列存储完整的二元组(比如(word1, word2))、B列存计数,之前的问题可能是CSV打开时的分隔符识别问题。可以显式指定分隔符,确保打开时正确拆分:

pd.DataFrame(common, columns=['bigram', 'count']).to_csv("output.csv", index=False, sep=",")

用Excel打开时,选择「数据」→「自文本/CSV」,指定逗号为分隔符即可正确分成两列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:35:21