Форум сайта python.su
Срочно!
i=0 while i<=49087: k=x.r1_hero_roles[i] if 'Nuker' in k: x['radiant_Nukers'][i]=x['radiant_Nukers'][i]+1 i=i+1
pd.options.mode.chained_assignment = None
Отредактировано Belg (Апрель 8, 2018 02:42:08)
Офлайн
BelgЕго не надо отключать, надо исправить сам код, чтобы оно не выводилось. Он говорит, что там взята копия объекта, а не сам объект. Поэтому, когда ты пытаешься поменять сам объект, он остаётся неизменным, потому что ты меняешь только временную копию.
Вычитал, что это не ошибка, а предупреждение и его можно отключить командой:
x['radiant_Nukers'][i]
x.loc[:,('radiant_Nukers',i)]
Отредактировано py.user.next (Апрель 8, 2018 06:41:57)
Офлайн
Скорее всего, ваш цикл while можно заменить, используя векторные операции в pandas, как-то так:
# x -- is a pandas data frame; # Select all rows, where r1_hero_roles contains Nuker, and increment corresponding radiant_Nukers values; x.loc[x.r1_hero_roles.str.contains("Nuker"),'radiant_Nukers'] += 1 # not tested...
Офлайн
py.user.next
Его не надо отключать, надо исправить сам код
Отредактировано Belg (Апрель 8, 2018 13:21:17)
Офлайн
scidamВозникает такая лютая ошибка:
Скорее всего, ваш цикл while можно заменить, используя векторные операции в pandas, как-то так:
Отредактировано Belg (Апрель 8, 2018 14:47:41)
Офлайн
x=1 while True: print(x) x=x+1
Офлайн
BelgВсе места с двойным индексированием замени на форму с loc. Там же в сообщении показано.
А как именно его исправить?
Belgpandas - это сторонний модуль. Там свои разработчики, у них своё восприятие того, что и как должно быть. К самому питону это не относится.
На старом-добром visual basic не раз подобный код
BelgНадо описать задание, потому что ты его вообще можешь неправильно делать. То есть решение этой проблемы может быть и не нужным вообще, может быть неправильным путём решения самой задачи.
фактически, он должен проверить 49 тысяч ячеек в столбце excel-таблицы, и если условие выполняется, то в изменить значение соседней ячейки
Отредактировано py.user.next (Апрель 8, 2018 15:05:18)
Офлайн
py.user.next
if 'Nuker' in k: x.loc[:,('radiant_Nukers',i)]=x.loc[:,('radiant_Nukers',i)]+1
Офлайн
py.user.next
Надо описать задание, потому что ты его вообще можешь неправильно делать. То есть решение этой проблемы может быть и не нужным вообще, может быть неправильным путём решения самой задачи.
Офлайн
Хорошо, вот рабочий пример. Проверяем есть ли в колонке ‘r1_hero_roles’ подстрока ‘sd’,
если есть, то увеличиваем соответствующее значение в колонке ‘radiant_Nukers’. Без циклов.
import pandas as pd # fake data frame... x = pd.DataFrame({'r1_hero_roles': pd.np.random.randint(97, 122, (50000, 10)).astype(np.uint8).view('S1').astype(np.object).sum(axis=1), 'radiant_Nukers': pd.np.random.randint(0, 100, 50000)}) # find all 'sd' occurences and increment radiant_Nukers column (replace 'sd' with 'Nuker') x.loc[x['r1_hero_roles'].str.decode('utf-8').str.contains('sd'), 'radiant_Nukers'] += 1 #>>> pd.__version__ #'0.21.0'
Офлайн