Как мой код работает без loc или iloc? - PullRequest
0 голосов
/ 05 марта 2019

Это из упражнения в 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)

Мой вопрос относится к строкам 2 и 3 с использованием row['clean_answer']. Как Python знает, что я хочу сослаться на ячейку (пересечение строки и столбца), не используя что-то вроде jeopardy.loc[row,['clean_answer']]? Я мог бы использовать любую переменную для row.

Этот код работает. Я просто не знаю почему. Если я использую код с loc, в jupyter выдается предупреждение о том, что мне нужно использовать reindex().

1 Ответ

0 голосов
/ 05 марта 2019

Когда вы используете jeopardy.apply(AnsFromQ, axis=1), вы применяете функцию AnsFromQ к каждой строке кадра данных. Переменная row дает вам фрагмент данных, представляющий текущую строку. Чтобы использовать jeopardy.loc[row,['clean_answer']], row должно быть значением из индекса jeopardy.

Другими словами, row - это pd.Series, который дает вам представление о каждой строке. Индексирование с помощью row['clean_answer'] дает ячейку из индекса этого столбца в текущей строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...