#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)