Я использую 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()
? Как я могу обойти это?
Проблема не в функции. При первом вызове вы выполняете:
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
.
df
.