Проблема в том, что ваш массив NumPy хранит ваши целые числа в виде строк:
data = np.array([['what is ?',2] , [1,5] , [2,3]])
print(data)
array([['what is ?', '2'],
['1', '5'],
['2', '3']],
dtype='<U9')
Это распространяется непосредственно на Панд:
print(type(df_1['1'].iloc[1]))
# str
Есть несколько обходных путей, все дорогие.Если это вообще возможно, желательно, чтобы в вашей серии были однородные типы.Для числовых массивов Pandas может хранить данные через NumPy в смежных блоках памяти.Это позволяет повысить производительность и повысить производительность.
Запрос с использованием строк
Вместо этого просто отфильтруйте по '1'
:
df_1[df_1['1'] == '1']
Преобразуйте целочисленные типы в int
Вы можете конвертировать отдельные элементы серии в int
.В конце концов, серия object
- это просто набор указателей.
df_1['1'] = df_1['1'].apply(lambda x: int(x) if x.isdigit() else x)
print(type(df_1['1'].iloc[1]))
<class 'int'>
Преобразование в числовое значение для запроса
Если вы не можете удалить нечисловые типы из ряда, когда вы выполняетезапрос, который вы можете использовать pd.to_numeric
:
df_1[pd.to_numeric(df_1['1'], errors='coerce') == 1]