#python #pandas #loops #for-loop
#python #pandas #циклы #for-цикл
Вопрос:
В настоящее время я пытаюсь выполнить итерацию по фрейму данных, сравнить каждое значение в списке строк со значением в определенном столбце фрейма данных. Если это сравнение верно, то добавьте значения из другого столбца той же строки в отдельный список.
list_of_words = 'yes', 'no', 'maybe'
appendList = []
for word in list_of_words:
for row in dataframe1.iterrows():
if row['A'] == word:
appendList.append(row['B'])
return appendList
Проблема в том, что я не уверен, как сравнить значение в списке со значением столбца. Я довольно новичок в pandas и python в целом, но до сих пор удобные методы были великолепны. Просто не уверен, как с этим работать, чтобы вернуть то, что мне нужно. Мы будем признательны за любую помощь или совет в любых документах, которые могли бы помочь!
Комментарии:
1.
dataframe1[dataframe1[‘A’].isin(list_of_words)][‘B’].tolist()
?2. Спасибо, Крис А! Это сработало отлично. Теперь у меня есть список, который я затем могу использовать.
Ответ №1:
Попробуйте следующее:
list_of_words = ['yes', 'no', 'maybe']
appendList = dataframe1.B[dataframe1.A.isin(list_of_words)]
Ответ №2:
В вашем примере каждый row
кортеж из двух элементов, который индексируется с использованием целого числа: row[0]
это номер строки и row[1]
это pandas.Серии. Таким образом, использование выражения является ошибкой типа row['A']
.
>>> row['A']
TypeError: tuple indices must be integers or slices, not str
Вы можете преобразовать pandas.Series
в обычный список python, содержащий элементы этой строки, используя pandas.Серии.tolist() и затем выполняет сравнение:
for row in dataframe1.iterrows():
row_data = row[1].tolist()
if row_data[0] == word:
appendList.append(row_data[1])
Будучи списком, row_data
должен быть проиндексирован с использованием целого числа. Это делает ваш код менее читаемым.
Комментарии:
1. Сейчас это запущено, я буду держать вас в курсе. Спасибо