pandas-dev / pandas

Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more
https://pandas.pydata.org
BSD 3-Clause "New" or "Revised" License
43.14k stars 17.75k forks source link

BUG: decimal.Decimal treated as string in DataFrame.to_excel() #47544

Open buhtz opened 2 years ago

buhtz commented 2 years ago

Pandas version checks

Reproducible Example

#!/usr/bin/env python3
import pandas as pd
from decimal import Decimal

df = pd.DataFrame({
    'foo': list('ABC'),
    'val': [
        Decimal('332344'),
        Decimal('6.324'),
        Decimal('87.397812')
    ]
})

print(df)
df.to_excel('p.xlsx')

from openpyxl import Workbook
wb = Workbook()
ws = wb.active

the_float = 1.2345
ws['A1'] = Decimal('1.2345')
ws['A2'] = the_float

wb.save('x.xlsx')

Issue Description

I use decimal.Decimal as type for float values in a DataFrame. Exporting them via to_excel() resulting in Excel cells with strings not floats. I tried xlsxwriter and openpyxl as engine.

See my MWE it seems that openpyxl itself can handle Decimal very well. The result is a real float not a string.

So the problem must somewhere in the pandas layer.

btw: Your Issue formula is to restrictive. I have no way to test the issue on the current upstream version. There are strict technical reasons for this. I haven't tested with upstream but checked the checkbox to be able to submit the Issue.

Expected Behavior

Create real float values in the Excel cells.

Installed Versions

>>> pandas.show_versions()
[DEBUG] matplotlib data path: .....AppData\Roaming\Python\Python39\site-packages\matplotlib\mpl-data
[DEBUG] CONFIGDIR=C:\Users\buhtzch\.matplotlib
[DEBUG] interactive is False
[DEBUG] platform is win32
[DEBUG] loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', '_io', 'marshal', 'nt', 'winreg', '_frozen_importlib_external', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', 'encodings.cp1252', '_signal', 'encodings.latin_1', '_abc', 'abc', 'io', '__main__', '_stat', 'stat', '_collections_abc', 'genericpath', 'ntpath', 'os.path', 'os', '_sitebuiltins', '_locale', '_bootlocale', 'types', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib', 'importlib.machinery', '_heapq', 'heapq', 'itertools', 'keyword', '_operator', 'operator', 'reprlib', '_collections', 'collections', 'collections.abc', '_functools', 'functools', 'contextlib', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', 'copyreg', 're', 'typing.io', 'typing.re', 'typing', 'importlib.abc', 'importlib.util', 'mpl_toolkits', 'sphinxcontrib', 'site', 'token', 'tokenize', 'linecache', 'traceback', '_weakrefset', 'weakref', '_string', 'string', 'threading', 'atexit', 'logging', 'posixpath', 'fnmatch', 'errno', 'urllib', 'urllib.parse', 'pathlib', 'math', '_datetime', 'datetime', '_struct', 'struct', '_compat_pickle', '_pickle', 'pickle', 'copy', '_ast', 'ast', '_opcode', 'opcode', 'dis', 'inspect', 'dataclasses', '_uuid', 'uuid', 'numbers', '_bisect', 'bisect', '_random', '_sha512', 'random', '_decimal', 'decimal', 'fractions', '_statistics', 'statistics', 'numpy._globals', 'numpy.__config__', 'glob', '_ctypes', 'ctypes._endian', 'ctypes', 'numpy._distributor_init', '__future__', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'numpy._version', 'numpy.version', 'numpy.core._multiarray_umath', 'numpy.compat._inspect', 'numpy.compat.py3k', 'numpy.compat', 'numpy.core.overrides', 'numpy.core.multiarray', 'numpy.core.umath', 'numpy.core._string_helpers', 'numpy.core._dtype', 'numpy.core._type_aliases', 'numpy.core.numerictypes', 'numpy.core._exceptions', 'numpy.core._methods', 'numpy.core.fromnumeric', 'numpy.core.shape_base', 'numpy.core._ufunc_config', 'numpy.core.arrayprint', 'numpy.core._asarray', 'numpy.core.numeric', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core._machar', 'numpy.core.getlimits', 'numpy.core.einsumfunc', 'numpy.core._multiarray_tests', 'numpy.core._add_newdocs', 'signal', 'msvcrt', '_winapi', 'subprocess', 'platform', '_socket', 'select', 'selectors', 'socket', 'numpy.core._add_newdocs_scalars', 'numpy.core._dtype_ctypes', 'numpy.core._internal', 'numpy._pytesttester', 'numpy.core', 'numpy.lib.mixins', 'numpy.lib.ufunclike', 'numpy.lib.type_check', 'numpy.lib.scimath', 'numpy.lib.stride_tricks', 'numpy.lib.twodim_base', 'numpy.linalg._umath_linalg', 'numpy.linalg.linalg', 'numpy.linalg', 'numpy.matrixlib.defmatrix', 'numpy.matrixlib', 'numpy.lib.histograms', 'numpy.lib.function_base', 'numpy.lib.index_tricks', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.polynomial', 'textwrap', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.format', 'numpy.lib._datasource', 'numpy.lib._iotools', 'numpy.lib.npyio', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.lib', 'numpy.fft._pocketfft_internal', 'numpy.fft._pocketfft', 'numpy.fft.helper', 'numpy.fft', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.polynomial', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.polynomial', 'cython_runtime', '_cython_0_29_24', 'numpy.random._common', 'binascii', 'base64', '_hashlib', '_blake2', 'hashlib', 'hmac', 'secrets', 'numpy.random.bit_generator', 'numpy.random._bounded_integers', 'numpy.random._mt19937', 'numpy.random.mtrand', 'numpy.random._philox', 'numpy.random._pcg64', 'numpy.random._sfc64', 'numpy.random._generator', 'numpy.random._pickle', 'numpy.random', 'numpy.ctypeslib', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.ma', 'numpy', 'pytz.exceptions', 'pytz.lazy', 'pytz.tzinfo', 'pytz.tzfile', 'pytz', 'dateutil._version', 'dateutil', 'mmap', 'pandas._typing', '_cython_0_29_21', 'pandas._libs.tslibs.dtypes', 'pandas._libs.tslibs.base', 'pandas._libs.tslibs.np_datetime', 'pandas._libs.tslibs.nattype', 'six', 'six.moves', 'dateutil.tz._common', 'dateutil.tz._factories', 'ctypes.wintypes', 'dateutil.tz.win', 'dateutil.tz.tz', 'dateutil.tz', 'pandas._libs.tslibs.timezones', 'pandas._libs.tslibs.ccalendar', 'pandas._libs.tslibs.tzconversion', 'locale', 'pandas._config.config', 'pandas._config.dates', 'pandas._config.display', 'pandas._config', 'pandas._config.localization', 'calendar', 'pandas._libs.tslibs.strptime', 'pandas._libs.tslibs.fields', 'pandas._libs.tslibs.timedeltas', 'pandas._libs.tslibs.timestamps', 'dateutil.easter', 'dateutil._common', 'dateutil.relativedelta', 'pandas._libs.properties', 'pandas._libs.tslibs.offsets', 'dateutil.parser._parser', 'dateutil.parser.isoparser', 'dateutil.parser', 'pandas._libs.tslibs.parsing', 'pandas._libs.tslibs.conversion', 'pandas._libs.tslibs.period', 'pandas._libs.tslibs.vectorized', 'pandas._libs.tslibs', 'pandas._libs.ops_dispatch', 'pandas._libs.missing', 'pandas._libs.hashtable', 'pandas._libs.algos', 'pandas._libs.interval', 'pandas._libs', 'pandas.util._decorators', 'pandas.core', 'pandas.core.util', 'pandas._libs.tslib', 'pandas._libs.lib', 'pandas._libs.hashing', 'pandas.core.dtypes', 'pandas.errors', 'pandas.core.dtypes.generic', 'pandas.core.dtypes.base', 'pandas.core.dtypes.inference', 'pandas.core.dtypes.dtypes', 'pandas.core.dtypes.common', 'pandas.core.util.hashing', 'pandas.util', 'pandas.util.version', 'pandas.compat.numpy', 'gc', 'pyarrow._generated_version', '_cython_0_29_28', 'pyarrow.util', '_queue', 'queue', 'pyarrow.lib', 'pyarrow._hdfsio', 'pyarrow.filesystem', 'pyarrow.hdfs', 'pyarrow.ipc', 'pyarrow.serialization', 'pyarrow.types', 'pyarrow', 'pandas.compat.pyarrow', 'pandas.compat', 'pandas.core.config_init', 'pandas.core.dtypes.missing', 'pandas.util._exceptions', 'pandas.util._validators', 'pandas.core.dtypes.cast', 'pandas.core.array_algos', 'pandas.core.common', 'pandas.core.construction', 'pandas.core.array_algos.take', 'pandas.core.indexers', 'pandas.core.algorithms', 'pandas.compat.numpy.function', 'pandas.compat._optional', 'pandas.core.missing', 'pandas.core.roperator', 'pandas._libs.ops', 'pandas.core.computation', 'pandas.core.computation.check', 'pandas.core.computation.expressions', 'pandas.core.ops.missing', 'pandas.core.ops.dispatch', 'pandas.core.ops.invalid', 'pandas.core.ops.array_ops', 'pandas.core.ops.common', 'pandas.core.ops.docstrings', 'pandas.core.ops.mask_ops', 'pandas.core.ops.methods', 'pandas.core.ops', 'pandas.core.sorting', 'pandas.core.arrays.base', 'pandas.core.nanops', 'pandas.core.array_algos.masked_reductions', 'pandas.core.arraylike', 'pandas.core.arrays.masked', 'pandas.core.arrays.boolean', '_csv', 'csv', 'zlib', '_compression', '_bz2', 'bz2', '_lzma', 'lzma', 'shutil', 'pandas._libs.arrays', 'pandas.core.accessor', 'pandas.core.array_algos.transforms', 'pandas.core.arrays._mixins', 'pandas.core.base', 'pandas.core.strings.accessor', 'pandas.core.strings.base', 'pandas.core.strings', 'unicodedata', 'pandas.core.strings.object_array', 'pandas.io', 'pandas.io.formats', 'pandas.io.formats.console', 'pandas.core.arrays.categorical', 'pandas.tseries', 'pandas.tseries.frequencies', 'pandas.core.arrays.datetimelike', 'pandas.core.arrays._ranges', 'pandas.core.arrays.numeric', 'pandas.core.tools', 'pandas.core.tools.numeric', 'pandas.core.arrays.integer', 'pandas.tseries.offsets', 'pandas.core.arrays.datetimes', 'pandas.core.arrays.floating', 'pandas.core.indexes', 'pandas._libs.index', 'pandas._libs.join', 'pandas._libs.sparse', 'pandas.core.arrays.sparse.dtype', 'pandas.io.formats.printing', 'pandas.core.arrays.sparse.array', 'pandas.core.arrays.sparse.accessor', 'pandas.core.arrays.sparse', 'pandas.core.dtypes.concat', 'pandas.core.array_algos.putmask', 'pandas.core.indexes.frozen', 'pandas.core.indexes.base', 'pandas.core.arrays.interval', 'pandas.core.arrays.numpy_', 'pandas.core.arrays.period', 'pandas.core.arrays.string_', 'pyarrow._compute', 'pyarrow._compute_docstrings', 'pyarrow.vendored', 'pkgutil', 'sysconfig', 'pydoc', 'pyarrow.vendored.docscrape', 'pyarrow.compute', 'pandas.core.arrays.string_arrow', 'pandas.core.arrays.timedeltas', 'pandas.core.arrays', 'pandas.core.flags', 'pandas._libs.reduction', 'pandas.core.indexes.extension', 'pandas.core.indexes.category', 'pandas.core.indexes.numeric', 'pandas.core.tools.timedeltas', 'pandas.core.indexes.datetimelike', 'pandas.core.tools.times', 'pandas.core.indexes.datetimes', 'pandas.core.indexes.multi', 'pandas.core.indexes.timedeltas', 'pandas.core.indexes.interval', 'pandas.core.indexes.period', 'pandas.core.indexes.range', 'pandas.core.indexes.api', 'pandas.core.aggregation', 'pandas.core.apply', 'pandas._libs.indexing', 'pandas.core.indexing', 'pandas.core.reshape', 'pandas._libs.internals', 'pandas._libs.writers', 'pandas.core.array_algos.quantile', 'pandas.core.array_algos.replace', 'pandas.core.internals.blocks', 'pandas.core.internals.api', 'pandas.core.internals.base', 'pandas.core.internals.array_manager', 'pandas.core.internals.ops', 'pandas.core.internals.managers', 'pandas.core.internals.concat', 'pandas.core.internals', 'pandas.core.reshape.concat', 'gzip', 'zipfile', 'pandas.io.common', 'pandas.io.formats.format', 'pandas.core.describe', 'pandas.core.internals.construction', 'pandas.core.shared_docs', 'pandas._libs.window', 'pandas._libs.window.aggregations', 'pandas.core.util.numba_', 'pandas.core.window.common', 'pandas.core.window.doc', 'pandas._libs.window.indexers', 'pandas.core.window.indexers', 'pandas.core.window.numba_', 'pandas.core.window.online', 'pandas.core.window.rolling', 'pandas.core.window.ewm', 'pandas.core.window.expanding', 'pandas.core.window', 'pandas.core.generic', 'pandas.core.reshape.util', 'pandas.core.reshape.melt', 'pandas._libs.reshape', 'pandas.core.indexes.accessors', 'pandas.arrays', 'pandas.core.tools.datetimes', 'pandas.plotting._core', 'pandas.plotting._misc', 'pandas.plotting', 'pandas.core.series', 'pandas.io.formats.info', 'pandas.core.frame', 'pandas.core.groupby.base', 'pandas._libs.groupby', 'pandas.core.groupby.numba_', 'pandas.core.groupby.categorical', 'pandas.core.groupby.grouper', 'pandas.core.groupby.ops', 'pandas.core.groupby.groupby', 'pandas.core.groupby.generic', 'pandas.core.groupby', 'pandas.core.api', 'pandas.tseries.api', 'pandas.core.computation.common', 'pandas.core.computation.align', 'pprint', 'pandas.compat.chainmap', 'pandas.core.computation.scope', 'pandas.core.computation.ops', 'pandas.core.computation.parsing', 'pandas.core.computation.expr', 'pandas.core.computation.engines', 'pandas.core.computation.eval', 'pandas.core.computation.api', 'pandas.core.reshape.merge', 'pandas.core.reshape.pivot', 'pandas.core.reshape.reshape', 'pandas.core.reshape.tile', 'pandas.core.reshape.api', 'pandas.api.extensions', 'pandas.api.indexers', 'pandas.core.dtypes.api', 'pandas.api.types', 'pandas.api', 'pandas.util._print_versions', 'pandas.io.clipboards', 'pandas._libs.parsers', 'pandas.io.excel._util', 'pandas.io.date_converters', 'pandas.io.parsers.base_parser', 'pandas.io.parsers.c_parser_wrapper', 'pandas.io.parsers.python_parser', 'pandas.io.parsers.readers', 'pandas.io.parsers', 'pandas.io.excel._odfreader', 'pandas.io.excel._openpyxl', 'pandas.io.excel._pyxlsb', 'pandas.io.excel._xlrd', 'pandas.io.excel._base', 'pandas._libs.json', 'pandas.io.formats._color_data', 'pandas.io.formats.css', 'pandas.io.formats.excel', 'pandas.io.excel._odswriter', 'pandas.io.excel._xlsxwriter', 'pandas.io.excel._xlwt', 'pandas.io.excel', 'pandas.io.feather_format', 'pandas.io.gbq', 'pandas.io.html', 'pandas.io.json._normalize', 'pandas.io.json._table_schema', 'pandas.io.json._json', 'pandas.io.json', 'pandas.io.orc', 'pandas.io.parquet', 'pandas.compat.pickle_compat', 'pandas.io.pickle', 'pandas.core.computation.pytables', 'pandas.io.pytables', 'pandas.io.sas.sasreader', 'pandas.io.sas', 'pandas.io.spss', 'pandas.io.sql', 'pandas.io.stata', 'pandas.io.xml', 'pandas.io.api', 'pandas.util._tester', 'pandas._testing._random', 'tempfile', 'pandas._testing.contexts', 'pandas._testing._io', 'pandas._testing._warnings', 'cmath', 'pandas._libs.testing', 'pandas._testing.asserters', 'pandas._testing.compat', 'pandas._testing', 'pandas.testing', 'pandas._version', 'pandas', 'humanize.filesize', 'gettext', 'humanize.i18n', 'humanize.number', 'humanize.time', 'email', 'configparser', 'importlib.metadata', 'email.errors', 'email.quoprimime', 'email.base64mime', 'quopri', 'email.encoders', 'email.charset', 'email.header', 'email._parseaddr', 'email.utils', 'email._policybase', 'email.feedparser', 'email.parser', 'uu', 'email._encoded_words', 'email.iterators', 'email.message', 'humanize', 'buhtzology._buhtzology', 'buhtzology', 'multiprocessing.process', 'multiprocessing.reduction', 'multiprocessing.context', '__mp_main__', 'multiprocessing', 'buhtzology.bandas', 'logging.handlers', '00_base', 'styleframe.utils', 'openpyxl.compat.numbers', 'openpyxl.compat.strings', 'openpyxl.compat', 'xml', 'xml.parsers', 'pyexpat.errors', 'pyexpat.model', 'pyexpat', 'xml.parsers.expat.model', 'xml.parsers.expat.errors', 'xml.parsers.expat', 'defusedxml.common', 'defusedxml', 'openpyxl.xml', 'openpyxl.worksheet', 'openpyxl.utils.exceptions', 'openpyxl.utils.cell', 'openpyxl.utils.formulas', 'openpyxl.utils', 'openpyxl.utils.datetime', 'openpyxl.descriptors.namespace', 'openpyxl.descriptors.base', 'xml.etree', 'xml.etree.ElementPath', 'et_xmlfile.xmlfile', 'et_xmlfile', '_elementtree', 'xml.etree.ElementTree', 'defusedxml.ElementTree', 'openpyxl.xml.constants', 'openpyxl.xml.functions', 'openpyxl.utils.indexed_list', 'openpyxl.descriptors.sequence', 'openpyxl.descriptors', 'openpyxl.descriptors.serialisable', 'openpyxl.styles.alignment', 'openpyxl.styles.colors', 'openpyxl.styles.borders', 'openpyxl.styles.fills', 'openpyxl.descriptors.nested', 'openpyxl.styles.fonts', 'openpyxl.styles.numbers', 'openpyxl.styles.protection', 'openpyxl.descriptors.excel', 'array', 'openpyxl.styles.cell_style', 'openpyxl.styles.named_styles', 'openpyxl.styles', 'openpyxl.styles.proxy', 'openpyxl.styles.builtins', 'openpyxl.styles.styleable', 'openpyxl.worksheet.hyperlink', 'openpyxl.cell.cell', 'openpyxl.cell.read_only', 'openpyxl.cell', 'openpyxl.styles.differential', 'openpyxl.formatting.rule', 'openpyxl.formatting', 'openpyxl.worksheet.cell_range', 'openpyxl.formatting.formatting', 'openpyxl.packaging', 'openpyxl.packaging.relationship', 'openpyxl.utils.escape', 'openpyxl.worksheet.header_footer', 'openpyxl.workbook.child', 'openpyxl.formula.tokenizer', 'openpyxl.formula', 'openpyxl.workbook.defined_name', 'openpyxl.formula.translate', 'openpyxl.worksheet.datavalidation', 'openpyxl.worksheet.page', 'openpyxl.utils.units', 'openpyxl.utils.bound_dictionary', 'openpyxl.worksheet.dimensions', 'openpyxl.utils.protection', 'openpyxl.worksheet.protection', 'openpyxl.worksheet.filters', 'openpyxl.worksheet.views', 'openpyxl.worksheet.merge', 'openpyxl.worksheet.properties', 'openpyxl.worksheet.pagebreak', 'openpyxl.worksheet.scenario', 'openpyxl.worksheet.related', 'openpyxl.worksheet.table', 'openpyxl.worksheet.worksheet', 'openpyxl.cell.text', 'openpyxl.worksheet._reader', 'openpyxl.worksheet._read_only', 'openpyxl.comments.comments', 'openpyxl.comments', 'openpyxl.comments.author', 'openpyxl.comments.shape_writer', 'openpyxl.comments.comment_sheet', 'openpyxl.cell._writer', 'openpyxl.worksheet._writer', 'openpyxl.worksheet._write_only', 'openpyxl.worksheet.copier', 'openpyxl.writer', 'openpyxl.drawing.drawing', 'openpyxl.drawing', 'PIL._version', 'PIL', 'PIL.ImageMode', 'PIL.TiffTags', 'PIL._binary', 'PIL._util', 'PIL._imaging', 'cffi.lock', 'cffi.error', 'cffi.model', 'cffi.api', 'cffi', 'PIL.Image', 'openpyxl.drawing.image', 'openpyxl.chart.layout', 'openpyxl.chart.picture', 'openpyxl.drawing.colors', 'openpyxl.drawing.effect', 'openpyxl.drawing.fill', 'openpyxl.drawing.line', 'openpyxl.drawing.geometry', 'openpyxl.chart.shapes', 'openpyxl.drawing.text', 'openpyxl.chart.data_source', 'openpyxl.chart.text', 'openpyxl.chart.error_bar', 'openpyxl.chart.marker', 'openpyxl.chart._3d', 'openpyxl.chart.legend', 'openpyxl.chart.reference', 'openpyxl.chart.label', 'openpyxl.chart.trendline', 'openpyxl.chart.series', 'openpyxl.chart.series_factory', 'openpyxl.chart.title', 'openpyxl.chart._chart', 'openpyxl.chart.descriptors', 'openpyxl.chart.axis', 'openpyxl.chart.area_chart', 'openpyxl.chart.bar_chart', 'openpyxl.chart.bubble_chart', 'openpyxl.chart.updown_bars', 'openpyxl.chart.line_chart', 'openpyxl.chart.pie_chart', 'openpyxl.chart.radar_chart', 'openpyxl.chart.scatter_chart', 'openpyxl.chart.stock_chart', 'openpyxl.chart.surface_chart', 'openpyxl.chart', 'openpyxl.drawing.xdr', 'openpyxl.drawing.properties', 'openpyxl.drawing.connector', 'openpyxl.drawing.picture', 'openpyxl.drawing.relation', 'openpyxl.drawing.graphic', 'openpyxl.drawing.spreadsheet_drawing', 'mimetypes', 'openpyxl.packaging.manifest', 'openpyxl.packaging.extended', 'openpyxl.styles.table', 'openpyxl.styles.stylesheet', 'openpyxl.workbook.external_reference', 'openpyxl.workbook.function_group', 'openpyxl.workbook.properties', 'openpyxl.workbook.protection', 'openpyxl.workbook.smart_tags', 'openpyxl.workbook.views', 'openpyxl.workbook.web', 'openpyxl.packaging.workbook', 'openpyxl.workbook._writer', 'openpyxl.writer.theme', 'openpyxl.writer.excel', 'openpyxl.worksheet.drawing', 'openpyxl.chartsheet.relation', 'openpyxl.chartsheet.properties', 'openpyxl.chartsheet.protection', 'openpyxl.chartsheet.views', 'openpyxl.chartsheet.custom', 'openpyxl.chartsheet.publish', 'openpyxl.chartsheet.chartsheet', 'openpyxl.chartsheet', 'openpyxl.packaging.core', 'openpyxl.workbook.workbook', 'openpyxl.workbook', 'openpyxl.reader', 'openpyxl.pivot', 'openpyxl.pivot.fields', 'openpyxl.pivot.table', 'openpyxl.reader.strings', 'openpyxl.workbook.external_link.external', 'openpyxl.workbook.external_link', 'openpyxl.pivot.cache', 'openpyxl.pivot.record', 'openpyxl.reader.workbook', 'openpyxl.chart.plotarea', 'openpyxl.chart.pivot', 'openpyxl.chart.print_settings', 'openpyxl.chart.chartspace', 'openpyxl.chart.reader', 'openpyxl.reader.drawings', 'openpyxl.reader.excel', 'openpyxl._constants', 'openpyxl', 'colour', 'styleframe.styler', 'styleframe.container', 'styleframe.series', 'styleframe.style_frame', 'styleframe.command_line', 'argparse', 'ipaddress', 'attr._compat', 'attr._config', 'attr.exceptions', 'attr.setters', 'attr._make', 'attr.converters', 'attr.filters', 'attr.validators', 'attr._cmp', 'attr._funcs', 'attr._version_info', 'attr._next_gen', 'attr', 'importlib._common', 'importlib.resources', 'jsonschema._utils', 'jsonschema.exceptions', 'idna.package_data', 'idna.idnadata', 'idna.intranges', 'idna.core', 'idna', 'jsonschema._format', 'pyrsistent._transformations', 'pvectorc', 'pyrsistent._pvector', 'pyrsistent._pmap', 'pyrsistent._pset', 'pyrsistent._pbag', 'pyrsistent._plist', 'pyrsistent._pdeque', 'pyrsistent._checked_types', 'pyrsistent._field_common', 'pyrsistent._precord', 'pyrsistent._pclass', 'pyrsistent._immutable', 'pyrsistent._helpers', 'pyrsistent._toolz', 'pyrsistent', 'jsonschema._types', 'http', '_ssl', 'ssl', 'http.client', 'urllib.response', 'urllib.error', 'nturl2path', 'urllib.request', 'jsonschema._legacy_validators', 'jsonschema._validators', 'jsonschema.validators', 'jsonschema.protocols', 'jsonschema', 'styleframe.version', 'styleframe.tests', 'styleframe.command_line.tests', 'styleframe.command_line.tests.json_schema', 'styleframe.command_line.commandline', 'styleframe.deprecations', 'unittest.util', 'unittest.result', 'difflib', 'unittest.case', 'unittest.suite', 'unittest.loader', 'unittest.signals', 'unittest.runner', 'unittest.main', 'unittest', 'concurrent', 'concurrent.futures._base', 'concurrent.futures', 'asyncio.constants', 'asyncio.format_helpers', 'asyncio.base_futures', 'asyncio.log', 'asyncio.coroutines', '_contextvars', 'contextvars', 'asyncio.exceptions', 'asyncio.base_tasks', '_asyncio', 'asyncio.events', 'asyncio.futures', 'asyncio.protocols', 'asyncio.transports', 'asyncio.sslproto', 'asyncio.locks', 'asyncio.tasks', 'asyncio.staggered', 'asyncio.trsock', 'asyncio.base_events', 'asyncio.runners', 'asyncio.queues', 'asyncio.streams', 'asyncio.subprocess', 'asyncio.threads', '_overlapped', 'asyncio.base_subprocess', 'asyncio.proactor_events', 'asyncio.selector_events', 'asyncio.windows_utils', 'asyncio.windows_events', 'asyncio', 'unittest.mock', 'styleframe.command_line.tests.commandline_tests', 'styleframe.tests.container_tests', 'styleframe.tests.series_tests', 'styleframe.tests.style_frame_tests', 'styleframe.tests.styler_tests', 'styleframe.tests.tests', 'styleframe', 'encodings.ascii', 'pandas.io.formats.string', 'xlsxwriter.xmlwriter', 'xlsxwriter.format', 'xlsxwriter.shape', 'xlsxwriter.utility', 'xlsxwriter.drawing', 'xlsxwriter.exceptions', 'xlsxwriter.worksheet', 'xlsxwriter.chartsheet', 'xlsxwriter.sharedstrings', 'xlsxwriter.app', 'xlsxwriter.contenttypes', 'xlsxwriter.core', 'xlsxwriter.custom', 'xlsxwriter.metadata', 'xlsxwriter.relationships', 'xlsxwriter.styles', 'xlsxwriter.theme', 'xlsxwriter.vml', 'xlsxwriter.table', 'xlsxwriter.comments', 'xlsxwriter.packager', 'xlsxwriter.chart', 'xlsxwriter.chart_area', 'xlsxwriter.chart_bar', 'xlsxwriter.chart_column', 'xlsxwriter.chart_pie', 'xlsxwriter.chart_doughnut', 'xlsxwriter.chart_line', 'xlsxwriter.chart_radar', 'xlsxwriter.chart_scatter', 'xlsxwriter.chart_stock', 'xlsxwriter.workbook', 'xlsxwriter', 'pip', '_distutils_hack', '_distutils_hack.override', 'distutils', 'distutils.debug', 'distutils.errors', 'getopt', 'distutils.fancy_getopt', 'distutils.dep_util', 'distutils.log', 'distutils.spawn', 'distutils.util', 'distutils.dist', 'distutils.dir_util', 'distutils.file_util', 'distutils.archive_util', 'distutils.cmd', 'distutils.config', 'distutils.extension', 'distutils.core', 'setuptools._deprecation_warning', 'plistlib', 'pkg_resources.extern', 'pkg_resources._vendor', 'pkg_resources._vendor.appdirs', 'pkg_resources.extern.appdirs', 'pkg_resources._vendor.packaging.__about__', 'pkg_resources._vendor.packaging', 'pkg_resources.extern.packaging', 'pkg_resources.extern.packaging._structures', 'pkg_resources.extern.packaging._typing', 'pkg_resources.extern.packaging.version', 'pkg_resources.extern.packaging._compat', 'pkg_resources.extern.packaging.utils', 'pkg_resources.extern.packaging.specifiers', 'pkg_resources._vendor.pyparsing', 'pkg_resources.extern.pyparsing', 'pkg_resources.extern.packaging.markers', 'pkg_resources.extern.packaging.requirements', 'pkg_resources', 'setuptools.version', 'distutils.filelist', 'setuptools.monkey', 'setuptools.extension', 'distutils.command', 'distutils.version', 'setuptools.extern', 'setuptools._vendor', 'setuptools._vendor.packaging.__about__', 'setuptools._vendor.packaging', 'setuptools.extern.packaging', 'setuptools._vendor.ordered_set', 'setuptools.extern.ordered_set', 'concurrent.futures.thread', 'setuptools._vendor.more_itertools.recipes', 'setuptools._vendor.more_itertools.more', 'setuptools._vendor.more_itertools', 'setuptools.extern.more_itertools', 'distutils.command.bdist', 'setuptools.command', 'setuptools.windows_support', 'setuptools.extern.packaging._structures', 'setuptools.extern.packaging._typing', 'setuptools.extern.packaging.version', 'setuptools.extern.packaging._compat', 'setuptools.extern.packaging.utils', 'setuptools.extern.packaging.specifiers', 'setuptools.config', 'setuptools.dist', 'setuptools.py34compat', 'setuptools._imp', 'setuptools.depends', 'distutils.ccompiler', 'distutils.msvc9compiler', 'setuptools.msvc', 'distutils._msvccompiler', 'setuptools', '_pytest._version', '_pytest', 'pluggy._version', 'pluggy._tracing', 'pluggy._result', 'pluggy._callers', 'pluggy._hooks', 'pluggy._manager', 'pluggy', '_pytest._code.source', '_pytest._io.wcwidth', 'py.error', 'py._error', 'py._vendored_packages', 'py._vendored_packages.apipkg.version', 'py._vendored_packages.apipkg', 'py._version', 'py.test', 'py.process', 'py.apipkg', 'py.iniconfig', 'py.path', 'py.code', 'py.builtin', 'py.io', 'py.xml', 'py.log', 'py', 'py._path', 'py._path.common', 'py._path.local', '_pytest.compat', '_pytest._io.terminalwriter', '_pytest._io', '_pytest._io.saferepr', '_pytest.warning_types', '_pytest.deprecated', '_pytest.outcomes', '_pytest.pathlib', '_pytest._code.code', '_pytest._code', 'shlex', '_pytest.hookspec', '_pytest.config.exceptions', 'iniconfig', '_pytest.config.findpaths', '_pytest.stash', '_pytest.config', '_pytest.assertion.util', '_pytest.mark.expression', '_pytest.mark.structures', '_pytest.config.argparsing', '_pytest.mark', '_pytest.nodes', '_pytest.scope', '_pytest.fixtures', '_pytest.reports', 'bdb', '_pytest.timing', '_pytest.runner', '_pytest.main', 'atomicwrites', '_pytest.assertion.rewrite', '_pytest.assertion.truncate', '_pytest.assertion', '_pytest.python', '_pytest.cacheprovider', '_pytest.capture', '_pytest.debugging', '_pytest.freeze_support', '_pytest.monkeypatch', '_pytest.tmpdir', '_pytest.pytester', '_pytest.terminal', '_pytest.legacypath', '_pytest.logging', '_pytest.python_api', '_pytest.recwarn', 'pytest', 'six.moves.urllib', 'webencodings.labels', 'encodings.utf_16_le', 'encodings.utf_16_be', 'webencodings', 'html5lib.constants', 'html5lib._utils', 'html5lib._inputstream', 'html5lib._trie._base', 'html5lib._trie.py', 'html5lib._trie', 'html5lib._tokenizer', 'html5lib.treebuilders', 'html5lib.treebuilders.base', 'html5lib.html5parser', 'html5lib.treewalkers', 'xml.sax.handler', 'xml.sax._exceptions', 'xml.sax.xmlreader', 'xml.sax', 'xml.sax.saxutils', 'html5lib.serializer', 'html5lib', 'jinja2.bccache', 'markupsafe._speedups', 'markupsafe', 'jinja2.utils', 'jinja2.nodes', 'jinja2.exceptions', 'jinja2.visitor', 'jinja2.idtracking', 'jinja2.optimizer', 'jinja2.compiler', 'jinja2.async_utils', 'jinja2.runtime', 'jinja2.filters', 'jinja2.tests', 'jinja2.defaults', 'jinja2._identifier', 'jinja2.lexer', 'jinja2.parser', 'jinja2.environment', 'jinja2.loaders', 'jinja2', 'soupsieve.__meta__', 'soupsieve.util', 'soupsieve.pretty', 'soupsieve.css_types', 'soupsieve.css_match', 'soupsieve.css_parser', 'soupsieve', 'html.entities', 'html', 'bs4.dammit', 'bs4.formatter', 'bs4.element', '_markupbase', 'html.parser', 'bs4.builder._htmlparser', 'bs4.builder._html5lib', 'bs4.builder', 'bs4', 'matplotlib', 'packaging.__about__', 'packaging', 'packaging._structures', 'packaging.version', 'matplotlib._api.deprecation', 'matplotlib._api', 'matplotlib._version', 'matplotlib._c_internal_utils', 'matplotlib.cbook', 'matplotlib.docstring', 'PIL.ImageChops', 'PIL.ImageFile', 'PIL.GimpGradientFile', 'PIL.GimpPaletteFile', 'PIL.ImageColor', 'PIL.PaletteFile', 'PIL.ImagePalette', 'PIL.ImageSequence', 'PIL.PngImagePlugin', 'matplotlib._path', 'matplotlib.bezier', 'matplotlib.path', 'matplotlib.transforms', 'matplotlib.ticker', 'matplotlib.scale', 'matplotlib._color_data', 'matplotlib.colors', 'pyparsing.util', 'pyparsing.unicode', 'pyparsing.exceptions', 'pyparsing.actions', 'pyparsing.results', 'pyparsing.core', 'pyparsing.helpers', 'pyparsing.testing', 'pyparsing.common', 'pyparsing', 'matplotlib.fontconfig_pattern', 'matplotlib._enums', 'cycler', 'matplotlib.rcsetup', 'matplotlib.ft2font', 'kiwisolver']

INSTALLED VERSIONS
------------------
commit           : f00ed8f47020034e752baf0250483053340971b0
python           : 3.9.10.final.0
python-bits      : 64
OS               : Windows
OS-release       : 10
Version          : 10.0.19043
machine          : AMD64
processor        : Intel64 Family 6 Model 140 Stepping 1, GenuineIntel
byteorder        : little
LC_ALL           : None
LANG             : None
LOCALE           : de_DE.cp1252

pandas           : 1.3.0
numpy            : 1.22.1
pytz             : 2021.3
dateutil         : 2.8.2
pip              : 22.1.2
setuptools       : 58.1.0
Cython           : None
pytest           : 7.1.2
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : 3.0.2
lxml.etree       : None
html5lib         : 1.1
pymysql          : None
psycopg2         : None
jinja2           : 3.0.3
IPython          : None
pandas_datareader: None
bs4              : 4.10.0
bottleneck       : None
fsspec           : None
fastparquet      : None
gcsfs            : None
matplotlib       : 3.5.1
numexpr          : None
odfpy            : None
openpyxl         : 3.0.9
pandas_gbq       : None
pyarrow          : 8.0.0
pyxlsb           : None
s3fs             : None
scipy            : 1.8.1
sqlalchemy       : None
tables           : None
tabulate         : 0.8.9
xarray           : None
xlrd             : 2.0.1
xlwt             : None
numba            : None
dimitra-karadima commented 1 year ago

Hi @simonjayhawkins, I want to tackle this issue. If you have any suggestions on this, I would be happy to hear it.

VinitaSilaparasetty commented 1 year ago

I would like to work on this issue as well. Thanks.

rhshadrach commented 7 months ago

Confirmed on main, further investigations and PRs to fix are welcome!

rmhowe425 commented 4 months ago

take