#python #pandas #function #dataframe #typeerror
#python #pandas #функция #фрейм данных #ошибка типа
Вопрос:
def function(s):
if (s['col1'] == 'something1')|(s['col1'] == 'smth2')|(s['col1'] == 'smth3'):
return 'A'
elif (s['col1'] == 'smth4')|(s['col1'] == 'smth5'):
return 'B'
elif (s['col1'] == 'smth6')|(s['col1'] == 'smth7'):
return 'C'
else:
return 'D'
Описанная выше функция сработала. Но когда я применяю ее к фрейму данных:
df['new_col'] = df.apply(function, axis = 1)
Я получаю:
TypeError: ("'bool' object is not callable", 'occurred at index 0')
Комментарии:
1. Вы уверены, что нет другой вызываемой переменной
function
, которая перезаписала фактическое определение функции?2. Для меня работает правильно.
3. Нет, нет переменной, называемой функцией.
Ответ №1:
Для меня работает правильно, вот альтернативное решение с Series.isin
и numpy.select
:
df = pd.DataFrame({
'col1':['something1','jeff bridges','smth7','billy boy','smth5']})
print (df)
def function(s):
if (s['col1'] == 'something1')|(s['col1'] == 'smth2')|(s['col1'] == 'smth3'):
return 'A'
elif (s['col1'] == 'smth4')|(s['col1'] == 'smth5'):
return 'B'
elif (s['col1'] == 'smth6')|(s['col1'] == 'smth7'):
return 'C'
else:
return 'D'
df['new_col'] = df.apply(function, axis = 1)
m1 = df['col1'].isin(['something1','smth2','smth3'])
m2 = df['col1'].isin(['smth4','smth5'])
m3 = df['col1'].isin(['smth6','smth7'])
df['new_col1'] = np.select([m1, m2, m3], ['A','B','C'], default='D')
print (df)
col1 new_col new_col1
0 something1 A A
1 jeff bridges D D
2 smth7 C C
3 billy boy D D
4 smth5 B B
Комментарии:
1. Большое спасибо, второй сработал, но я не понял, почему другой не работает?
2. @SaidTaxmezov — Сложный вопрос, для меня все работает правильно. Если изменение имени функции не помогает?