#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 . Это также работает, но мне показалось излишне сложным ^^. Я постараюсь, если смогу улучшить его с помощью вашего совета. Я пока не думал об использовании лямбда-функции, но это может сработать. Итак, спасибо!