没有loc或iloc的代码如何工作?

时间:2019-03-05 19:29:56

标签: python pandas dataframe

这是来自DataQuest的练习。数据集可以在这里找到:https://www.reddit.com/r/datasets/comments/1uyd0t/200000_jeopardy_questions_in_a_json_file

我有一个函数,该函数可以从根本上找出问题中某个单词出现危险的次数。

def AnsFromQ(row):
    split_answer = row['clean_answer'].split(" ")
    split_question = row['clean_question'].split(" ")
    match_count = 0
    if 'the' in split_answer:
        split_answer.remove("the")
    if len(split_answer) == 0:
        return 0
    for word in split_answer:
        if word in split_question:
            match_count += 1
    return match_count / len(split_answer)

jeopardy['answer_in_question'] = jeopardy.apply(AnsFromQ, axis=1)

我的问题与使用row['clean_answer']的第2行和第3行有关。 python如何知道我要引用单元格(行和列的相交)而不使用jeopardy.loc[row,['clean_answer']]之类的东西?我可以为row使用任何变量。

此代码有效。我只是不知道为什么。如果我将代码与loc一起使用,则会在jupyter中警告我说我需要使用reindex()

1 个答案:

答案 0 :(得分:0)

使用jeopardy.apply(AnsFromQ, axis=1)时,您正在将AnsFromQ函数应用于数据框的每一行。 row变量为您提供了代表当前行的数据框的一部分。为了使用jeopardy.loc[row,['clean_answer']]row必须是jeopardy的索引中的值。

换句话说,rowpd.Series,可为您提供每一行的视图。使用row['clean_answer']对其进行索引将为您提供当前行中该列索引的单元格。