Почему стили Excel не работают в Pandas?

import pandas as pd
import xlsxwriter
from datetime import datetime
import sys

path = sys.argv[1]
xl = pd.ExcelFile(path)
df = xl.parse("Sheet1")
df.columns = ['Nume', 'Tip de', 'Unit', 'Speciale Price', 'Suma de', 'Suma']


def highlight_max(x):
    return ['background-color: yellow' if v == x.max() else ''
        for v in x]

df.style.apply(highlight_max)
df.loc[-1] = ['Totul', '', '', '', df['Suma de'].sum(), df['Suma'].sum()]

Я пытался применить highlight_max к столбцам

Каков формат файла в path, который вы пытаетесь прочитать?

Nazim Kerimbekov 17.04.2019 00:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
2 902
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваша цель — получить лист Excel со стилизованными ячейками, то вам все равно придется явно экспортировать фрейм данных в файл Excel.

Попробуйте заменить df.style.apply(highlight_max) на df.style.apply(highlight_max).to_excel('styled.xlsx').

в excel значение выглядит как <pandas.io.formats.style.Styler at 0x18aaa2a6c50>

EXODIA 04.06.2021 07:42
Ответ принят как подходящий

Итак, я собираюсь предположить, что вы хотите применить изменение стиля к вашему фрейму данных в python так, как оно предназначено для реализации, и отображать изменения цвета при печати вашего фрейма данных в консоли. Проблема (Я предполагаю, что) в том, что вы не используете IDE Jupyter Notebook (или любую другую IDE в Интернете), где она предназначена для использования. См. сравнение ниже.

Источник: Документация по стилю Pandas

Объект стиля отображается в формате html, где веб-среда IDE, такая как Jupyter Notebook, может считывать и отображать изменения.

Это упрощение, взятое из документации по Spyder IDE. Обратите внимание, что вывод является объектом стиля. При рендеринге вы можете увидеть во втором выводе html/css, который Spyder IDE не может интерпретировать.

import pandas as pd

data1 = {'Nume': [1,-2,-3],
         'Tip de':[4,-5,-6],
         'Unit':[-7,-8,9],
         'Speciale Price': [10,11,12],
         'Suma de': [13,14,15],
         'Suma':[16,17,18]}

df1 = pd.DataFrame(data1)
print(df1)

def color_negative_red(val):
    """
    Takes a scalar and returns a string with
    the css property `'color: red'` for negative
    strings, black otherwise.
    """
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

s = df1.style.applymap(color_negative_red)
s

Output[] = <pandas.io.formats.style.Styler at 0x18aaa2a6c50>

s.render()

Output[] = '<style  type = "text/css" >\n    #T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col0 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col1 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col2 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col3 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col4 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col5 {\n            color:  red;\n            color:  red;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col0 {\n            color:  red;\n            color:  red;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col1 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col2 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col3 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col4 {\n            color:  red;\n            color:  red;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col5 {\n            color:  red;\n            color:  red;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col0 {\n            color:  red;\n            color:  red;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col1 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col2 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col3 {\n            color:  black;\n            color:  black;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col4 {\n            color:  red;\n            color:  red;\n        }    #T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col5 {\n            color:  black;\n            color:  black;\n        }</style>  \n<table id = "T_db7ac00c_6244_11e9_887c_74d4355eed37" > \n<thead>    <tr> \n        <th class = "blank level0" ></th> \n        <th class = "col_heading level0 col0" >Nume</th> \n        <th class = "col_heading level0 col1" >Speciale Price</th> \n        <th class = "col_heading level0 col2" >Suma</th> \n        <th class = "col_heading level0 col3" >Suma de</th> \n        <th class = "col_heading level0 col4" >Tip de</th> \n        <th class = "col_heading level0 col5" >Unit</th> \n    </tr></thead> \n<tbody>    <tr> \n        <th id = "T_db7ac00c_6244_11e9_887c_74d4355eed37level0_row0" class = "row_heading level0 row0" >0</th> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col0" class = "data row0 col0" >1</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col1" class = "data row0 col1" >10</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col2" class = "data row0 col2" >16</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col3" class = "data row0 col3" >13</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col4" class = "data row0 col4" >4</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row0_col5" class = "data row0 col5" >-7</td> \n    </tr>    <tr> \n        <th id = "T_db7ac00c_6244_11e9_887c_74d4355eed37level0_row1" class = "row_heading level0 row1" >1</th> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col0" class = "data row1 col0" >-2</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col1" class = "data row1 col1" >11</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col2" class = "data row1 col2" >17</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col3" class = "data row1 col3" >14</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col4" class = "data row1 col4" >-5</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row1_col5" class = "data row1 col5" >-8</td> \n    </tr>    <tr> \n        <th id = "T_db7ac00c_6244_11e9_887c_74d4355eed37level0_row2" class = "row_heading level0 row2" >2</th> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col0" class = "data row2 col0" >-3</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col1" class = "data row2 col1" >12</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col2" class = "data row2 col2" >18</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col3" class = "data row2 col3" >15</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col4" class = "data row2 col4" >-6</td> \n        <td id = "T_db7ac00c_6244_11e9_887c_74d4355eed37row2_col5" class = "data row2 col5" >9</td> \n    </tr></tbody> \n</table> '

Во втором примере выполняется точно такое же упрощение в веб-среде IDE Jupyter Notebooks. Обратите внимание, что результирующий вывод s отображает желаемый измененный стиль.

Спасибо, я изучу это решение, не могли бы вы посоветовать мне, как установить ширину для каждого столбца?

OPV 19.04.2019 10:48

Попробуйте изучить pd.describe.option() и вспомогательную документацию здесь. Вы можете отфильтровать настройки по ширине, передав pd.describe_option('width'), и изучить возможность изменения настроек по мере необходимости. Если вам нужно сбросить все настройки обратно к исходным, вы можете запустить pd.reset_option('all').

Angel Roman 19.04.2019 19:24

Другие вопросы по теме