Панды не могут выбрать, когда '?'содержится в столбце - PullRequest
0 голосов
/ 13 июня 2018

Объявление этого кадра данных:

columns = ['1','2']
data = np.array([['what is ?',2] , [1,5] , [2,3]])
df_1 = pd.DataFrame(data,columns=columns)
df_1

Попытка фильтрации на основе значения 1 не возвращает совпавшую строку, если в столбце содержится ?:

df_1[df_1['1'] == 1]

не возвращает никаких значений

Появляется ? вызывает проблему?

Как выполнить фильтрацию, если ? содержится в фильтруемой строке?

1 Ответ

0 голосов
/ 13 июня 2018

Проблема в том, что ваш массив 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...