Удалить строку в Dataframe, если содержит вопросительный знак Python 3 - PullRequest
0 голосов
/ 24 августа 2018

Я новичок здесь, поэтому, пожалуйста, прости за любые ошибки.Я пытаюсь работать над набором данных переписи для взрослых.Мне трудно удалить вопросительные знаки в наборе данных.

Ссылка на набор данных: - https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data

Я также попробовал 1-й ответ в данной ссылке: - Удалить строки со значением «вопросительный знак» в любом столбце вa pandas dataframe

Но я получаю сообщение об ошибке

~/anaconda3/lib/python3.6/site-packages/pandas/core/ops.py in wrapper(self, other, axis)
   1251 
   1252             with np.errstate(all='ignore'):
-> 1253                 res = na_op(values, other)
   1254             if is_scalar(res):
   1255                 raise TypeError('Could not compare {typ} type with Series'

~/anaconda3/lib/python3.6/site-packages/pandas/core/ops.py in na_op(x, y)
   1164                     result = method(y)
   1165                 if result is NotImplemented:
-> 1166                     raise TypeError("invalid type comparison")
   1167             else:
   1168                 result = op(x, y)

TypeError: invalid type comparison

Скажите, пожалуйста, как решить эту проблему.Я использую Python 3.6

Спасибо !!

Редактировать 1: - Это также называется набор данных о доходах переписи.

1 Ответ

0 голосов
/ 24 августа 2018

Сначала приведение к строкам, а затем фильтрация по boolean indexing:

df = df[(df.astype(str) != '?').all(axis=1)]
#alternative solution
#df = df[~(df.astype(str) == '?').any(axis=1)]
print (df)
   X  Y  Z
1  1  2  3
3  4  4  4

Или сравните массив numpy:

df = df[(df.values != '?').all(axis=1)]

Подробнее :

Сравнить все преобразованные строки по astype с условием изменения на !=:

print (df.astype(str) != '?')
       X      Y      Z
0   True   True  False
1   True   True   True
2  False  False   True
3   True   True   True
4  False   True   True

И затем проверьте, если all True значений в строке:

print ((df.astype(str) != '?').all(axis=1))
0    False
1     True
2    False
3     True
4    False
dtype: bool
...