Python:如何将令牌列表添加到数据框的新列

时间:2019-02-12 11:44:32

标签: python pandas token

我有一个超过50行的大型数据框。对于每一行,我都有一列“令牌”,其中包含大量文本令牌。我使用了for循环以及频率分布来查找“令牌”列中每一行的前10个令牌。

我试图在我的数据框中添加一个名为“ top10”的新列,以便对于每一行,“ top10”列中包含前10个标记。

这是我用来查找每行的前10个令牌的当前代码。

for i in range(len(df)):
   tokens = df.iloc[i]['tokens']
   frequency = nltk.FreqDist(tokens)
   print(" ", word_frequency.most_common(10))

我的数据框示例:

id location about age tokens
1    usa     ...  20   ['jim','hi','hello'......]
...
... 
40    uk     ...  50   ['bobby','hi','hey'......]

预期输出:

id location about age tokens                           top10
1    usa     ...  20   ['jim','hi','hello'......]   ['hi', 'paddy'....]
...
... 
40    uk     ...  50   ['bobby','hi','hey'......]   ['john', 'python'..]

top10列应按降序显示单词。

感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

这是向DF添加新列的简单方法:

df['top10'] = word_frequency.most_common(10)

答案 1 :(得分:0)

带有关键字参数apply(不要展开列表)和reduce(在行上,而不是默认列)的

pandas axis=1更好,因为您已经在行上进行了迭代。熊猫会将您的列表解释为系列,而不适合单个单元格。

import pandas as pd
import nltk

df =  pd.DataFrame({x :{'tokens': ['hello', 'python', 'is', 'is', 'is', 'dog', 'god', 'cat', 'act', 'fraud', 'hola', 'the', 'a', 'the', 'on', 'no', 'of', 'foo', 'foo']} for x in range(0,10)} ).T


def most_common_words_list (x):
    word_count_tups = nltk.FreqDist(x['tokens']).most_common(2)
    return [word for word, count in word_count_tups]

df ['top2'] = df.apply(most_common_words_list,  result_type='reduce', axis=1)