Давайте посмотрим на источник проблемы.Это на самом деле вызов np.array
.
np.array([['a', 1, 'foo'],
['b', 2, 'bar'],
['c', 3, 'biz'],
['d', 99, 'baz']])
Это фактически приводит целые числа к строкам:
array([['a', '1', 'foo'],
['b', '2', 'bar'],
['c', '3', 'biz'],
['d', '99', 'baz']], dtype='<U3')
Обратите внимание, что во втором столбце все строки, из-за приведения типов.OTOH, если вы инициализируете массив с явным dtype=object
, отдельные типы сохраняются:
data = np.array([['a', 1, 'foo'],
['b', 2, 'bar'],
['c', 3, 'biz'],
['d', 99, 'baz']], dtype=object)
df = pd.DataFrame(columns=['x', 'y', 'z'], data=data)
df.y.isin([1,3])
0 True
1 False
2 True
3 False
Name: y, dtype: bool
Или, что еще лучше, пропустите гетерогенный список списков (без преобразования в массив).
df = pd.DataFrame(data=[['a', 1, 'foo'],
['b', 2, 'bar'],
['c', 3, 'biz'],
['d', 99, 'baz']],
columns=list('xyz'))
df.y.isin([1,3])
0 True
1 False
2 True
3 False
Name: y, dtype: bool