Перебор списка с плавающей точкой в таблице на python

#python #pandas #iteration

#python #pandas #итерация

Вопрос:

У меня небольшая проблема с python.

Я хотел бы извлечь число «7» из списка чисел в каждой ячейке столбца в таблице большего размера. Число 7 обозначает, что в опрашиваемой семье есть холодильник.

Это мой текущий код:

 raw_data = pd.read_csv('raw_data.csv')

test = raw_data["s6q68_electric_appliance"]

def check_has_refrigerator(input_value):
    if "7" in input_value:
        return True
    return False

raw_data["has_refrigerator"] = test.apply(check_has_refrigerator)
  

Однако приведенный выше код не работает, поскольку python не может выполнять итерации по элементам с плавающей точкой. Мой вопрос в том, как я могу изменить значения в каждой ячейке, которые будут отображаться в виде строки, чтобы позволить python извлекать число «7» из каждой ячейки. В пределах заданной ячейки номера отображаются случайным образом, например, «7 10 11 12 13», и я хотел бы извлечь только число «7».

Спасибо.

Комментарии:

1. "7" это строка, а не число. 7 или 7.0 — это числа. Строки не могут быть равны числам. Строки также не могут быть больше или меньше чисел. Строки не являются числами

2. Я не думаю, что «python не может выполнять итерацию по элементам с плавающей точкой» — это ваша проблема. Это утверждение не имеет смысла. Если бы у вас был список элементов с плавающей точкой, Python, безусловно, мог бы выполнить итерацию по этому списку. Я предполагаю, что проблема в том, что вы неправильно обработали данные в файле CSV, чтобы разрешить то, что вы просите. Вы должны показать нам, что делает test.apply() и как выглядит input_value .

3. в качестве примера, если у вас есть столбец со значением типа «7 10 11 12 13», вы хотели бы разделить это значение на уникальные числа. В данном случае это легко сделать с помощью «7 10 11 12 13».split(‘ ‘) . Тогда у вас был бы список, и вы могли бы сказать, если «7» в myList: , например. Это не требует обработки «7» как числа. Если вам не нужно выполнять арифметические вычисления или сравнивать две величины, эти вещи, возможно, могут оставаться строками. Просто для перехода к следующему шагу, если вам действительно нужны числа, вы могли бы сделать это: myList = [float(x) для x в «7 10 11 12 13».split(‘ ‘)] и у вас был бы список значений с плавающей точкой.

4. Если столбец содержит списки чисел в формате строки, как показано, то apply это совершенно не нужно, как есть split . df['col1']=df['col'].str.contains('7') позволяет избежать итерации вообще

Ответ №1:

Если я правильно понимаю, у вас есть строка, которая представляет список значений int, разделенных пробелами. Следовательно, вам нужно было бы разделить(‘ ‘), а затем проверить, есть ли 7?

например

  set_of_int = set(text.split(' '))
 seven_is_in = ("7" in set_of_int)
  

или

 set_of_int = set(map(int,text.split(' ')))
seven_is_in = (7 in set_of_int)
  

Комментарии:

1. set_of_int в этом случае не будет набором целых чисел, потому что split() выдаст вам список строк. Итак, чтобы это работало с наименьшими изменениями, вам нужно («7» в list_of_int) . То, что вы, вероятно, хотите, это set([int(x) для x в text.split(‘ ‘)])

2. Да, извините, стремился к «7», написал слишком быстро, исправлю

Ответ №2:

Я думаю, это так просто:

 def check_has_refrigerator(input_value):
    if "7" in input_value.split(' '):
        return True
    return False
  

предполагая, что input_value выглядит как «7 10 11 12 13».

Ответ №3:

Спасибо всем. Я довольно новичок в Python, поэтому приношу свои извинения за то, что не был так ясен с первоначальным вопросом, Стивен! Теперь это работает, я использовал подход Дж. Андерсона. Спасибо!