Проблема в том, что isdigit
будет только True
всякий раз, когда строка состоит исключительно из цифровых символов.Вот пример, чтобы проиллюстрировать это:
l = ['123', 'ab12', 'shf']
list(map(str.isdigit, l))
# [True, False, False]
Однако, когда запустить любой (char.isdigit () для char в я получаю true или false правильно
Это потому, что входной итератор для any
в этом случае является строкой, и, следовательно, при итерации по строке он находит числовые значения:
any(char.isdigit() for char in '123aswd')
# True
Но, как показано в первоначальном примере, когдавходной итератор представляет собой список строк, если только они не состоят только из цифровых символов str.isdigit
вернет False
.
Вместо этого вы можете сделать что-то вроде:
df['num'] = df.Info.str.extract(r'(\d+)').fillna('-')
print(df)
Info num
0 Tap -
1 15k 15
2 rot -
3 12psi 12