Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG: DataFrame html repr does not work for complex dtypes if DataFrame is empty #54167

Closed
3 tasks done
jasonboh opened this issue Jul 17, 2023 · 8 comments · Fixed by #54451
Closed
3 tasks done

BUG: DataFrame html repr does not work for complex dtypes if DataFrame is empty #54167

jasonboh opened this issue Jul 17, 2023 · 8 comments · Fixed by #54451
Assignees
Labels
Bug Complex Complex Numbers good first issue IO HTML read_html, to_html, Styler.apply, Styler.applymap Output-Formatting __repr__ of pandas objects, to_string

Comments

@jasonboh
Copy link

Pandas version checks

  • I have checked that this issue has not already been reported.

  • I have confirmed this bug exists on the latest version of pandas.

  • I have confirmed this bug exists on the main branch of pandas.

Reproducible Example

# %%
dfe1 = pd.DataFrame({"x": np.array([], dtype="complex")})
dfe1
# %%
dfe2 = pd.DataFrame({"x": np.array([], dtype="float")})
dfe2

Issue Description

The above example must be run in a Jupyter notebook so that the html repr method gets called. For the dfe1 empty DataFrame, the error is ValueError: max() arg is an empty sequence. For dfe2, everything works correctly and the html repr is shown.

Expected Behavior

dfe1 repr shoudl be same as dfe2 repr in a Jupyter notebook.

Installed Versions

INSTALLED VERSIONS

commit : 0f43794
python : 3.10.4.final.0
python-bits : 64
OS : Windows
OS-release : 10
Version : 10.0.19044
machine : AMD64
processor : Intel64 Family 6 Model 141 Stepping 1, GenuineIntel
byteorder : little
LC_ALL : None
LANG : None
LOCALE : English_United States.1252

pandas : 2.0.3
numpy : 1.24.3
pytz : 2022.7.1
dateutil : 2.8.2
setuptools : 58.1.0
pip : 22.0.4
Cython : 0.29.33
pytest : 7.2.1
hypothesis : None
sphinx : 5.3.0
blosc : None
feather : None
xlsxwriter : None
lxml.etree : None
html5lib : None
pymysql : None
psycopg2 : None
jinja2 : 3.1.2
IPython : 8.10.0
pandas_datareader: None
bs4 : None
bottleneck : None
brotli : None
fastparquet : None
fsspec : 2023.6.0
gcsfs : None
matplotlib : 3.7.0
numba : None
numexpr : None
odfpy : None
openpyxl : 3.1.2
pandas_gbq : None
pyarrow : 12.0.1
pyreadstat : None
pyxlsb : None
s3fs : None
scipy : 1.10.1
snappy : None
sqlalchemy : None
tables : None
tabulate : None
xarray : None
xlrd : None
zstandard : None
tzdata : 2023.3
qtpy : None
pyqt5 : None

@jasonboh jasonboh added Bug Needs Triage Issue that has not been reviewed by a pandas team member labels Jul 17, 2023
@lithomas1 lithomas1 added Output-Formatting __repr__ of pandas objects, to_string IO HTML read_html, to_html, Styler.apply, Styler.applymap Complex Complex Numbers and removed Needs Triage Issue that has not been reviewed by a pandas team member labels Jul 17, 2023
@lithomas1
Copy link
Member

Thanks, I can also reproduce this on main

For reference the traceback is

>>> dfe1.to_html()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/thomasli/pandas/pandas/core/frame.py", line 3162, in to_html
    return fmt.DataFrameRenderer(formatter).to_html(
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1074, in to_html
    string = html_formatter.to_string()
  File "/Users/thomasli/pandas/pandas/io/formats/html.py", line 82, in to_string
    lines = self.render()
  File "/Users/thomasli/pandas/pandas/io/formats/html.py", line 88, in render
    self._write_table()
  File "/Users/thomasli/pandas/pandas/io/formats/html.py", line 263, in _write_table
    self._write_body(indent + self.indent_delta)
  File "/Users/thomasli/pandas/pandas/io/formats/html.py", line 411, in _write_body
    fmt_values = self._get_formatted_values()
  File "/Users/thomasli/pandas/pandas/io/formats/html.py", line 406, in _get_formatted_values
    fmt_values = {i: self.fmt.format_col(i) for i in range(self.ncols)}
  File "/Users/thomasli/pandas/pandas/io/formats/html.py", line 406, in <dictcomp>
    fmt_values = {i: self.fmt.format_col(i) for i in range(self.ncols)}
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 893, in format_col
    return format_array(
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1298, in format_array
    return fmt_obj.get_result()
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1331, in get_result
    fmt_values = self._format_strings()
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1611, in _format_strings
    return list(self.get_result_as_array())
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1578, in get_result_as_array
    formatted_values = format_values_with(float_format)
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1556, in format_values_with
    result = _trim_zeros_complex(values, self.decimal)
  File "/Users/thomasli/pandas/pandas/io/formats/format.py", line 1965, in _trim_zeros_complex
    padded_length = max(len(part) for part in padded_parts) - 1
ValueError: max() arg is an empty sequence

It should be a pretty easy fix if you or someone else wants to put up a PR.
(Since the length of the array is zero, the value of padded_length doesn't really matter, so you just need to get it to not error. It would probably be reasonable to set it to 0 in the empty case though).

@harikirank
Copy link

take

harikirank added a commit to harikirank/pandas that referenced this issue Jul 18, 2023
@harikirank harikirank mentioned this issue Jul 18, 2023
2 tasks
harikirank added a commit to harikirank/pandas that referenced this issue Jul 18, 2023
@attack68
Copy link
Contributor

Do you know how styler handles this:
df.style
Maybe that also needs fixing?

@harikirank
Copy link

Hi @attack68, I don't know how that works. Could you please help me?

@soumya1729
Copy link
Contributor

hi @harikirank have you put in a PR for this yet?

@harikirank
Copy link

Hi @soumya1729, Not yet. If you want to work on this issue please go ahead.

@soumya1729
Copy link
Contributor

@harikirank thanks, yeah would like to try!

soumya1729 added a commit to soumya1729/pandas that referenced this issue Aug 5, 2023
@attack68
Copy link
Contributor

attack68 commented Aug 7, 2023

You dont need to fix the Styler, just DataFrame.to_html, btw, this already works.
Screenshot 2023-08-07 at 10 15 25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Complex Complex Numbers good first issue IO HTML read_html, to_html, Styler.apply, Styler.applymap Output-Formatting __repr__ of pandas objects, to_string
Projects
None yet
5 participants