Как выполнить итерацию по фрейму данных, и для каждой строки этого фрейма данных выполнить некоторые действия? - PullRequest
1 голос
/ 17 апреля 2019

У меня есть сценарий, в котором у меня есть некоторые данные в файле CSV, и мне нужно перебрать каждую строку и найти, найдено ли определенное значение.Если найдено, то выполняется одна операция, в противном случае выполняется другая операция.

Это набор данных, который я использовал:

enter image description here

import pandas as pd

dataset = pd.read_csv('Teams\India.csv')

Ind = 0 SA = 0

if(dataset.loc[(dataset['Opponent']) == 'South Africa' & (dataset['Result']) == 'Won']): Ind = Ind + 1 else: SA = SA + 1

Согласно моему CSV-файлу, Индия сыграла 6 матчей с Южной Африкой и выиграла 5 из них.Итак, в конце значение «Ind» должно быть 5, а «SA» - 1.

Но я получаю следующие ошибки, независимо от того, что я делаю, когда пытаюсь запустить этот код:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Похоже, вы можете сделать за один выстрел:

Ind = ((dataset['Opponent'] == 'South Africa') & (dataset['Result'] == 'Won')).sum()
SA = len(dataset) - Ind
0 голосов
/ 17 апреля 2019

то, что вы пытаетесь сделать, не будет работать, потому что loc вернет все строки, где ваше условие True .они не будут повторяться автоматически.

Для того, что вы пытаетесь сделать, не нужно использовать оператор iterrows или if.

попробуйте это:

Ind = dataset.loc[(dataset['Opponent'] == 'South Africa') & (dataset['Result'] == 'Won')].shape[0]

SA = dataset.loc[(dataset['Opponent'] != 'South Africa') | (dataset['Result'] != 'Won')].shape[0]

Таким образом, это будет быстрее, чем использование for loop

0 голосов
/ 17 апреля 2019

Вам нужно, если ((условие1 == х) & (условие2 == у)): ...

Вам также нужен цикл вроде

for row in data:
 if...:
  counter += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...