Python 从字符串中获取关键字列表

Python 从字符串中获取关键字列表,python,pandas,Python,Pandas,我有一个数据框,其中一列包含丹麦语电影的字符串描述: df.Description.tail() 24756 Der er nye kendisser i rundkredsen, nemlig Ski... 24757 Hvad fÃ¥r man, hvis man blander en gruppe af k... 24758 Hvordan vælter man en minister? Hvordan ødel... 24759 Der er dømt m

我有一个数据框,其中一列包含丹麦语电影的字符串描述:

df.Description.tail()

24756    Der er nye kendisser i rundkredsen, nemlig Ski...
24757    Hvad får man, hvis man blander en gruppe af k...
24758    Hvordan vælter man en minister? Hvordan ødel...
24759    Der er dømt mandehygge i hulen hos ZULUs tera...
24760    Kender du de dage på arbejdet, hvor alt bare ...
我首先检查
Description
列的所有值是否都是字符串:
df.applymap(type).eq(str).all()

我想创建另一列,其中包含每个字符串中的单词,用a分隔,如下所示:

24756   [Der, er, nye, kendisser, i, rundkredsen, ...
在我的循环中,我还使用Rake()删除丹麦停止词。这是我的循环:

# initializing the new column
df['Key_words'] = ""

for index, row in df.iterrows():
    plot = row['Description']

    # instantiating Rake, by default is uses english stopwords from NLTK, but we want Danish
    # and discard all puntuation characters
    r = Rake('da')

    # extracting the words by passing the text
    r.extract_keywords_from_text(plot)

    # getting the dictionary whith key words and their scores
    key_words_dict_scores = r.get_word_degrees()

    # assigning the key words to the new column
    row['Key_words'] = list(key_words_dict_scores.keys())
问题是新列
keywords
为空

df.Key\u words.tail()

感谢您的帮助。

来自:

您不应该修改正在迭代的内容。这不是 保证在任何情况下都能工作。根据数据类型的不同 迭代器返回的是一个副本而不是一个视图,对其进行写入将没有任何意义 效果

在您的情况下,这两条线的组合就是问题所在:

for index, row in df.iterrows():  # row is generated
    [...]
    row['Key_words'] = list(key_words_dict_scores.keys()) # row is modified
如果您想使用iterrows,可以避免上述情况,例如通过将中间数据存储在列表中,如下所示:

import pandas as pd

# make dummy dataframe
df = pd.DataFrame({'a':range(5)})

#initialise list
new_entries = []

# do iterrows, and operations on entries in row
for ix, row in df.iterrows():
    new_entries.append(2* row['a'])  # store intermediate data in list

df['b'] = new_entries # assign temp data to new column
还有一条建议:我必须生成自己的数据框来说明我的解决方案,因为您发布数据的格式不允许轻松导入/复制。请检查,以便能够提出更好的公式化问题。

使用apply

def my_keyword_func(row):
    plot = row['Description']
    ....
    return ['key word 1', 'key word 2']
df['Key_words'] = df.apply(my_keyword_func, axis=1)

多谢各位。我绝不会想象你不能操纵迭代的行。很抱歉,没有先创建数据框发布,您是对的:)
import pandas as pd

# make dummy dataframe
df = pd.DataFrame({'a':range(5)})

#initialise list
new_entries = []

# do iterrows, and operations on entries in row
for ix, row in df.iterrows():
    new_entries.append(2* row['a'])  # store intermediate data in list

df['b'] = new_entries # assign temp data to new column
def my_keyword_func(row):
    plot = row['Description']
    ....
    return ['key word 1', 'key word 2']
df['Key_words'] = df.apply(my_keyword_func, axis=1)