使用另一列向熊猫中的数据框添加一列

数据挖掘 熊猫
2022-02-16 11:04:45

所以我在数据框中有一个名为“plot”的列,我想创建一个名为“keywords”的新列,它只有重要的 plot 单词。这是代码:

 import pandas as pd
 import numpy as np
 from sklearn.metrics.pairwise import cosine_similarity 
 from sklearn.feature_extraction.text import CountVectorizer
 import re  
 import nltk
 nltk.download('stopwords')    
 from nltk.corpus import stopwords 
 df = pd.read_csv('IMDB_Top250Engmovies2_OMDB_Detailed.csv')
 df = df[['Title','Genre','Director','Actors','Plot']]
 df['Keywords'] = ''

 for index,row in df.iterrows():
     plot = row['Plot']
     plot = re.sub('[^a-zA-Z]'," ", plot)
     plot = plot.lower()
     plot = plot.split()
     plot = [i for i in plot if not i in set(stopwords.words('english'))]
     plot = ' '.join(plot)                                          
     row['Key_words'] = str(plot)

这是输出:(

在此处输入图像描述

链接到 csv:https ://query.data.world/s/uikepcpffyo2nhig52xxeevdialfl7

谢谢 !

2个回答

它可能是这样的

在这里创建函数:

def important_words(plot):
    # your code here
    return plot

使用apply功能:

df["Keywords"] = df.Plot.apply(lambda x: important_words(x))

Iterrow 传递行的副本,而不是引用。这应该可以解决您的问题:

df.loc[index,'Keywords'] = str(plot)

但是,我建议使用apply,恕我直言,它更优雅。而且速度要快得多。

看起来像这样

def string_to_keywords(string):
    plot = re.sub('[^a-zA-Z]'," ", string)
    plot = plot.lower()
    plot = plot.split()
    return " ".join([i for i in plot if not i in set(stopwords.words('english'))])

df["Keywords"] = df["Plot"].apply(string_to_keywords)