我正在做一些自然語言處理,我有一個(gè) MultiIndexed DataFrame 看起來像這樣(除了實(shí)際上大約有 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...我想要做的是計(jì)算每個(gè) n-gram 在每個(gè)月出現(xiàn)的次數(shù)(因此是第一個(gè)索引,“Period”)。這樣做相當(dāng)簡(jiǎn)單,如果很耗時(shí)(并且因?yàn)椤癗-grams”列中的每個(gè)單元格都是一個(gè)列表,我不確定可以做多少來加速它)。我使用以下代碼創(chuàng)建了一個(gè)新的 DataFrame 來保存計(jì)數(shù):# 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邏輯很簡(jiǎn)單:如果有問題的 n-gram 已經(jīng)被看到(在“freqs”中有一個(gè)列),將計(jì)數(shù)增加 1。如果沒有看到,創(chuàng)建一個(gè)新的 0 列對(duì)于那個(gè) n-gram,然后像往常一樣遞增。在絕大多數(shù)情況下,這工作正常,但對(duì)于一小部分 n-gram,當(dāng)循環(huán)遇到增量線時(shí),我會(huì)收到此錯(cuò)誤:KeyError: u'the label [7 85.40] is not in the [index]'(抱歉,缺少正確的堆棧跟蹤——我在 Zeppelin Notebook 中執(zhí)行此操作,而 Zeppelin 沒有提供正確的堆棧跟蹤。)更多的調(diào)試表明,在這些情況下,新列的創(chuàng)建會(huì)以靜默方式失?。ㄒ簿褪钦f,它不起作用,但也不會(huì)返回異常)??赡苤档米⒁獾氖?,在早期版本的代碼中,我使用“l(fā)oc”直接分配給新創(chuàng)建的列中的單元格,而不是先創(chuàng)建列,如下所示:if not ngram in freqs.columns: freqs.loc[period, ngram] = 1我改變了這一點(diǎn),因?yàn)樗ㄟ^將那個(gè) n-gram 的 NaN 分配給所有其他時(shí)期引起了問題,但是直接分配阻塞在與新代碼完全相同的 n-gram 上。
添加回答
舉報(bào)
0/150
提交
取消