我正在做一些自然语言处理,我有一个 MultiIndexed DataFrame 看起来像这样(除了实际上大约有 3,000 行): Title N-gramsPeriod Date 2015-01 2015-01-01 22:00:10 SIRF: Simultaneous Image Registration and Fusi... [@SENTBEGIN paper, paper propose, propose nove... 2015-01-02 16:54:13 Generic construction of scale-invariantly coar... [@SENTBEGIN encode, encode temporal, temporal ... 2015-01-04 00:07:00 Understanding Trajectory Behavior: A Motion Pa... [@SENTBEGIN mining, mining underlie, underlie ... 2015-01-04 09:07:45 Hostile Intent Identification by Movement Patt... [@SENTBEGIN the, the recent, recent year, year... 2015-01-04 14:35:58 A New Method for Signal and Image Analysis: Th... [@SENTBEGIN brief, brief review, review provid...我想要做的是计算每个 n-gram 在每个月出现的次数(因此是第一个索引,“Period”)。这样做相当简单,如果很耗时(并且因为“N-grams”列中的每个单元格都是一个列表,我不确定可以做多少来加速它)。我使用以下代码创建了一个新的 DataFrame 来保存计数:# Create the frequencies DataFrame.period_index = ngrams.index.unique(level = "Period")freqs = DataFrame(index = period_index)# Count the n-grams in each period.for period in period_index: for ngrams_list in ngrams.loc[period, "N-grams"]: for ngram in ngrams_list: if not ngram in freqs.columns: freqs[ngram] = 0 freqs.loc[period, ngram] += 1逻辑很简单:如果有问题的 n-gram 已经被看到(在“freqs”中有一个列),将计数增加 1。如果没有看到,创建一个新的 0 列对于那个 n-gram,然后像往常一样递增。在绝大多数情况下,这工作正常,但对于一小部分 n-gram,当循环遇到增量线时,我会收到此错误:KeyError: u'the label [7 85.40] is not in the [index]'(抱歉,缺少正确的堆栈跟踪——我在 Zeppelin Notebook 中执行此操作,而 Zeppelin 没有提供正确的堆栈跟踪。)更多的调试表明,在这些情况下,新列的创建会以静默方式失败(也就是说,它不起作用,但也不会返回异常)。可能值得注意的是,在早期版本的代码中,我使用“loc”直接分配给新创建的列中的单元格,而不是先创建列,如下所示:if not ngram in freqs.columns: freqs.loc[period, ngram] = 1我改变了这一点,因为它通过将那个 n-gram 的 NaN 分配给所有其他时期引起了问题,但是直接分配阻塞在与新代码完全相同的 n-gram 上。
添加回答
举报
0/150
提交
取消