【问题标题】:How to export original CSV columns, alongside Bigram count and frequency to new csv?如何将原始 CSV 列以及 Bigram 计数和频率导出到新的 csv?
【发布时间】:2019-10-15 08:04:56
【问题描述】:

这是我第一次使用 Python,如果这是一个愚蠢的问题,我深表歉意。我有一个 3 列 CSV,第一列称为评论(这是我操作成二元组的列),第二列称为评论类型,第三列称为评论日期。我对此代码的当前输出感到满意,我将第 1 列(注释)拆分为二元组,计算频率,然后导出到 CSV 文件中。但现在我还想将原始 csv 中的评论类型和评论日期列(不对它们进行任何更改)添加到我导出的 CSV 旁边的单词和频率列。我不确定如何去做,并测试了一些想法,但没有奏效。

import csv
import string
import re
from nltk.util import everygrams
import pandas as pd


from collections import Counter

from itertools import combinations

df = pd.read_csv('modified.csv', 'r', encoding="utf8",
                 names=['comment'])
top_N = 1000
stopwords = nltk.corpus.stopwords.words('english')

RE_stopwords = r'\b(?:{})\b'.format('|'.join(stopwords))

txt = df.comment.str.lower().str.replace(r'\|', ' ').str.cat(sep=' ')

words = nltk.tokenize.word_tokenize(txt)
words = [w for w in words if not w in RE_stopwords]

bigrm = list(nltk.bigrams(words))



word_dist = nltk.FreqDist([' '.join(x) for x in bigrm])
rslt = pd.DataFrame(word_dist.most_common(top_N),
                columns=['Word', 'Frequency'])

print(rslt)
rslt.to_csv('bigram3.csv')

【问题讨论】:

    标签: python python-3.x csv export-to-csv


    【解决方案1】:

    最后添加的行,在您的rslt 数据框中创建一个新列,并将数据从您的原始数据框中复制到这一列。

    import csv
    import string
    import re
    from nltk.util import everygrams
    import pandas as pd
    
    
    from collections import Counter
    
    from itertools import combinations
    
    df = pd.read_csv('modified.csv', 'r', encoding="utf8",
                     names=['comment'])
    top_N = 1000
    stopwords = nltk.corpus.stopwords.words('english')
    
    RE_stopwords = r'\b(?:{})\b'.format('|'.join(stopwords))
    
    txt = df.comment.str.lower().str.replace(r'\|', ' ').str.cat(sep=' ')
    
    words = nltk.tokenize.word_tokenize(txt)
    words = [w for w in words if not w in RE_stopwords]
    
    bigrm = list(nltk.bigrams(words))
    
    
    
    word_dist = nltk.FreqDist([' '.join(x) for x in bigrm])
    rslt = pd.DataFrame(word_dist.most_common(top_N),
                    columns=['Word', 'Frequency'])
    rslt['Column_Type'] = df['comment type']
    rslt['Column_Date'] = df['comment date']
    print(rslt)
    rslt.to_csv('bigram3.csv')
    

    【讨论】:

    • 如果对您有帮助,请接受答案。 :)
    • 谢谢,这很有帮助! rslt['Column_Type'] = df['comment type'] rslt['Column_Date'] = df['comment date'] 正在产生所需的结果,但是当我只在 CSV 文件中创建两个列标题时想要一个。我应该如何解决这个问题?
    • 您的列标题应为:index(unnamed)、Bigram、Bigram Count、Comment_Type 和 Column_Date。如果要删除未命名的索引列,请将rslt.to_csv('bigram3.csv') 设置为rslt.to_csv('bigram3.csv', index = False)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多