новый фрейм данных в инструкции if. Python

#python #pandas #dataframe #conditional

#python #pandas #фрейм данных #условные операторы

Вопрос:

Вот часть кода, с которой у меня возникают проблемы:

 for x in range(len(df['Days'])):
    if df['Days'][x]>0 and df['Days'][x]<=30: 
        b = df['Days'][x]
b
  

Результат, который я получаю, равен b = 14, что является последним значением, которое оператор if хранит в столбце фрейма данных. Я пытаюсь получить ВСЕ значения столбца, в котором выполняется оператор if, которые будут храниться в «b», а не только одно последнее значение.

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

1. Вероятно, вы захотите инициализировать b как list() перед циклом for, а затем b.append(df['Days'][x] в вашем операторе if.

2. Пожалуйста, добавьте некоторые примеры данных к этому вопросу и ожидаемый результат. Способ доступа к данным в вашем фрейме данных является нетрадиционным. Вам следует отказаться от использования цепочечной индексации. Если в вашем операторе есть ‘][‘, то вы, вероятно, индексируете цепочку.

Ответ №1:

Вместо этого вы хотите составить список и добавить к нему b .

 my_vals = []
for x in range(len(df['Days'])):
    if df['Days'][x]>0 and df['Days'][x]<=30: 
        b = df['Days'][x]
        my_vals.append(b)
my_vals
  

В вашем коде вы изменяете b на каждой итерации, и поэтому в нем сохраняется только самое последнее значение. В будущем, когда вы будете пытаться сохранить несколько значений, делайте это в другом типе данных.

Ответ №2:

Вы также можете использовать функциональность фильтрации pandas и использовать

values = df.loc[(df['Days'] >= 0) amp; (df['Days'] <= 30)]

Если вы хотите, чтобы значения были в виде ряда, а не фрейма данных, используйте

values_series = values['Days']

Если вы хотите, чтобы значения были в виде списка, а не ряда, используйте

values_list = list(values_series)