Python 3.x 如何使用基于函数返回的值在python中设置一个新列?
我正在用python进行一些文本挖掘,如果搜索函数的返回值为true,则希望设置一个值为1的新列,如果返回值为false,则为0 我尝试了各种if语句,但都没有成功 下面是我所做工作的简化版本:Python 3.x 如何使用基于函数返回的值在python中设置一个新列?,python-3.x,Python 3.x,我正在用python进行一些文本挖掘,如果搜索函数的返回值为true,则希望设置一个值为1的新列,如果返回值为false,则为0 我尝试了各种if语句,但都没有成功 下面是我所做工作的简化版本: import pandas as pd import nltk nltk.download('punkt') df = pd.DataFrame ( { 'student number' : [1,2,3,4,5], 'answer' : [ 'Yes,
import pandas as pd
import nltk
nltk.download('punkt')
df = pd.DataFrame (
{
'student number' : [1,2,3,4,5],
'answer' : [ 'Yes, she is correct.', 'Yes', 'no', 'north east', 'No its North East']
# I know there's an apostrophe missing
}
)
print(df)
# change all text to lower case
df['answer'] = df['answer'].str.lower()
# split the answer into individual words
df['text'] = df['answer'].apply(nltk.word_tokenize)
# Check if given words appear together in a list of sentence
def check(sentence, words):
res = []
for substring in sentence:
k = [ w for w in words if w in substring ]
if (len(k) == len(words) ):
res.append(substring)
return res
# Driver code
sentence = df['text']
words = ['no','north','east']
print(check(sentence, words))
这就是你想要的我想:
df['New'] = df['answer'].isin(words)*1
这个对我很有用:
for i in range(0, len(df)):
if set(words) <= set(df.text[i]):
df['NEW'][i] = 1
else:
df['NEW'][i] = 0
范围(0,len(df))内的i的:
如果set(words),您的意思是如果答案包含['no'、'north'、'east'],那么答案是错误的??不,如果它包含这些单词,它将是正确的,所以我想设置一个“mark”列,如果它包含这些单词,则在其中加1,否则加0。当我这样说的时候,听起来很简单,但我真的很努力。非常感谢你,它建立了一个新的专栏,并进入了1和0,这就是我一直在努力做的。这将只包含“否”的答案标记为正确,其他所有答案标记为错误,而实际上只有最终答案是正确的,因此我仍然需要对其进行一些更改,但这可能是因为我原来的功能有错误。@JoPalmer太棒了!