У меня есть многодисковые серии pd.Series
такие как [100, 50, 0, foo, bar, baz]
когда я запускаю pd.Series.str.isnumeric()
Я получаю [NaN, NaN, NaN, False, False, False]
Почему это происходит? Разве он не должен возвращать True
для первых трех в этой серии?
Строковые методы Pandas тесно связаны с методами Python:
str.isnumeric(100) # TypeError
str.isnumeric('100') # True
str.isnumeric('a10') # False
Любой тип, который дает ошибку, даст NaN
. Согласно документам Python, str.isnumeric
применим только для строк:
str.isnumeric()
Возвращает true, если все символы в строке являются числовыми символами, и есть хотя бы один символ, иначе false.
Согласно документам Pandas, pd.Series.str.isnumeric
эквивалентен str.isnumeric
:
Series.str.isnumeric()
Проверьте, являются ли все символы в каждой строке в серии/индексе числовыми. Эквивалентенstr.isnumeric()
.
Ваша серия имеет "объект" dtype, это всеохватывающий тип, который содержит указатели на произвольные объекты Python. Это может быть смесь строк, целых чисел и т.д. Поэтому вы должны ожидать значения NaN
где строки не найдены.
Чтобы разместить числовые типы, вам нужно явно преобразовать строки, например, задать серию s
:
s.astype(str).str.isnumeric()
Использование isnumeric
строк преобразует ваши номера в NaN
, это происходит, прежде чем вы даже попытаетесь использовать isnumeric
:
s = pd.Series([100, 50, 0, 'foo', 'bar', 'baz'])
s.str[:]
0 NaN
1 NaN
2 NaN
3 foo
4 bar
5 baz
dtype: object
Таким образом, NaN
остается, когда вы используете isnumeric
. astype
этого используйте astype
:
s.astype(str).str.isnumeric()
0 True
1 True
2 True
3 False
4 False
5 False
dtype: bool
pd.Series.str.isnumeric()
должен привести к ошибке.