我有一个数据框,其中一列包含丹麦语电影的字符串描述:
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()
Video.ID.v26 False
Title True
Category False
Description True
dtype: bool
我想要创建另一列,其中包含在每个字符串中找到的单词,用分隔,如下所示:
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())
问题是新列Key_words
为空...
df.Key_words.tail()
24756
24757
24758
24759
24760
Name: Key_words, dtype: object
任何帮助表示赞赏。
答案 0 :(得分:1)
来自documentation of df.iterrows:
您永远不要修改要迭代的内容。这不是 保证在所有情况下都能正常工作。根据数据类型, 迭代器返回一个副本而不是一个视图,并且对其进行写入将没有 效果。
在您的情况下,这种组合是问题所在:
for index, row in df.iterrows(): # row is generated
[...]
row['Key_words'] = list(key_words_dict_scores.keys()) # row is modified
如果要使用迭代,可以通过将中间数据存储在列表中来避免上述情况,例如:
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
另一条建议:我必须生成自己的数据框来说明我的解决方案,因为发布数据的格式不允许轻松导入/复制。请查看this post,以便提出更好的公式化问题。
答案 1 :(得分:0)
使用套用
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)