ISNUMER превосходная функция в PYTHON - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующий набор данных

sku ids link 
 1   55   1     
 2   56   3     
 3   57   ab    
 5   58   1     
 9   59   bc 
 10  60   1

Я пытаюсь определить следующую функцию для создания нового столбца

def fmq(row): 
    if row['link'] == 1:
        value = 10
    else:
        row['link']      
return value

Я получаю следующую ошибку TypeError: ("'> 'не поддерживается между экземплярами' str 'и' float '', 'произошло с индексом 0')

df['sub_link'] = df.apply(fmq, axis=1)

Окончательный результат:

sku ids link sub_link
 1   55   1     10
 2   56   3     3
 3   57   ab    ab
 5   58   1     10
 9   59   bc    bc
 10  60   1     10

I know that in excel we can use isnumber([link]) function,
how can i replicate this function in python? 

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

pd.to_numeric + mask

Используйте методы Панд.В этом случае сначала необходимо преобразовать в числовое значение.

link_num = pd.to_numeric(df['link'], errors='coerce')

df['sub_link'] = df['link'].mask(link_num == 1, 10)

Решения со строками, такие как apply, включают циклы уровня Python: они неэффективны и не рекомендуются.

0 голосов
/ 20 ноября 2018

Если я правильно понимаю проблему, вы по сути хотите проверить, является ли что-то целым, верно?Вы можете сделать

1) Кастинг

try:
    to_test = int(value)
except Exception as e:
    pass  # In this case it could not be casted to an int 

2) проверка типа

if isinstance(value, int):
    #  do thing
else:
    # do other thing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...