#python #numpy #pandas #scipy
#python #numpy #pandas #scipy
Вопрос:
У меня есть целые числа ‘high’ и ‘low’ (оба целочисленных значения, весь мой набор данных — это числа, содержащие столбцы со значениями int и float.) и фрейм данных с именем ‘data’, и я хочу узнать целочисленный индекс строк, который удовлетворяет следующему условию:
Условие
- Если все столбцы в фрейме данных отклоняются как от максимума, так и от минимума, удалите всю эту строку.
Я проверил каждый столбец и нашел пересекающиеся значения, но не смог найти подходящий способ, пожалуйста, помогите.
Количество столбцов в считываемых данных может варьироваться, следовательно, мой код должен быть динамическим. Мой код :
li = {}
variables = list(data.columns.values)
for x in variables :
li[x] = []
le = len(variables)
for x in range(0,le):
li[(variables[x])].append( data[~(data[(variables[x])]>credentials[(variables[x])]['low']) amp; (data[(variables[x])]<credentials[(variables[x])]['high']) ].index)
vals = li.values()
uniq = set([vals[0]]) # this line shows error.
for lst in vals[1:]:
uniq.intersection_update(lst)
result_rows = list (uniq)
data.drop(data.index[result_rows])
Я пытаюсь выполнить условие, выбрав индексы данных! = отклонение
но получение целочисленного индекса, похоже, является проблемой. Не удалось найти правильные ответы в сети.
мой ‘li’ dict выглядит следующим образом
{u'Combed': [Int64Index([148, 159], dtype='int64')],
u'OE': [Int64Index([], dtype='int64')],
u'P': [Int64Index([], dtype='int64')],
u'PCH': [Int64Index([126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 141, 142, 143, 144, 145], dtype='int64')],
u'PV': [Int64Index([32, 34, 35, 36, 37, 81, 85], dtype='int64')],
u'V': [Int64Index([], dtype='int64')]}
Комментарии:
1. Какую ошибку вы видите? Если это так
TypeError: 'int' object is not iterable
, это потому, что вы передаете одно целое число вset
оператор, когда он ожидает итерируемый объект.vals[0]
является целым числом, поэтому ваш цикл for добавляет только один элемент в этот список. Если это ожидается, и вы хотите передать список отдельных элементов в оператор set, вам нужно изменить его наset([vals[0]])
.2. @SiHa: извините за опечатку, которую я ввел точно так, как вы упомянули, я получаю сообщение об ошибке «unhashable type: Int64Index», мне нужен способ найти целое число индекса. li [столбец], похоже, имеет значения индекса, а не его целочисленное значение.
3. @user3792799: Ваше окончательное требование — найти строки, в которых все значения в этой конкретной строке находятся в пределах low и high?