Использование pandas applymap () с несколькими функциями отображения

1

Я использую df.to_excel() для вывода данных из df.to_excel() данных pandas в excel. Чтобы улучшить читаемость, я использую df.style.applymap() чтобы изменить цвет ячейки на основе содержимого.

Представьте себе, что у меня есть dataframe, который выглядит так:

df = 
       Account  Revenue   AccountAge
0     "Boeing"     5000          5.6
1   "Lockheed"   -10000          1.2
2     "Airbus"    12000          0.6
3   "Northrop"    -3000          8.4

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

def color_neg_revenue(val):
    if val < 0:
        color = 'red'
    return "background-color: %s" % color

df = df.style.applymap(color_neg_revenue, subset=["Revenue"])

Я могу экспортировать это в excel, и формат выглядит великолепно! Но предположим, что я также хочу отмечать новые аккаунты желтым цветом, когда я пытаюсь:

def color_new_account(val):
    if val < 3:
        color = 'yellow'
    return "background-color: %s" % color

df = df.style.applymap(color_new_account, subset=["AccountAge"])

Я получил:

AttributeError: 'Styler' object has no attribute 'style'

Почему я не могу использовать applymap() в кадре данных, который я уже использовал applymap()? Как я могу обойти это?

  • 1
    Но вы назначаете стилист для df .
Теги:
pandas
excel

1 ответ

1

Проблема не в функции. При первом вызове вы выполняете:

df = df.style.applymap(color_neg_revenue, subset=["Revenue"])

Итак, теперь df больше не является DataFrame, это Styler. Такой Styler не имеет, конечно, не .style атрибутов больше. Таким образом, вы лучше назначаете его другой переменной, а цепочку на этом. Подобно:

s = df.style.applymap(color_neg_revenue, subset=["Revenue"])

# Look mom, no I have no .style
s = s.applymap(color_new_account, subset=["AccountAge"])

Таким образом, вы можете applymap такие вызовы applymap когда используете Styler, но у такого .style нет атрибута самого .style.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню