Как я могу присвоить значения фрейму данных с помощью цикла, если появляются пустые ряды

#python #pandas #dataframe

#python #панды #фрейм данных

Вопрос:

Я много фильтрую в большем фрейме данных и помещаю эти результаты в новый столбец (разные значения для каждой строки). Иногда фильтрация заканчивается пустой серией, и я получаю «ValueError: несовместимый индексатор с серией».

Есть ли способ, которым в этих случаях используется «Nan» или «0»?

Вот пример моей проблемы:

   df=pd.DataFrame(np.arange(0,20).reshape(4,5),columns=["A","B","C","D","E"])
    
    for idx in df.index:
         df.loc[idx,"E"]=df.loc[(df.A>10)amp;(df.B<11)].C.values
 

Ожидаемый результат здесь: Nan или 0

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

1. Пожалуйста, опубликуйте ожидаемый результат на основе предоставленного образца ввода.

Ответ №1:

Вероятно, есть более простой способ объединить это вместе, np.where() or apply(lambda x: x....) но на самом деле вам просто нужно проверить, является ли возвращаемое значение пустым фреймом / значением данных, и если для вашего столбца установлено значение ноль.

 for idx in df.index:
    if len(df.loc[(df.A>10)amp;(df.B<11)].C.values)==0:
        df.loc[idx,"E"] = 0
    else:
        df.loc[idx,"E"]=df.loc[(df.A>10)amp;(df.B<11)].C.values
 

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

1. Да, похоже, это вариант. Я пробовал это до сих пор с помощью строки try и except . Это также работает, но мне показалось излишне сложным ^^. Я постараюсь, если смогу улучшить его с помощью вашего совета. Я пока не думал об использовании лямбда-функции, но это может сработать. Итак, спасибо!