Skip to content

BUG: many dataframe operations broken when a column contains numpy structured array #60108

Open
@digitalsignalperson

Description

@digitalsignalperson

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

import numpy as np
import pandas as pd

N = 10
hash_dtype = np.dtype([(f'h{i}', np.uint64) for i in range(4)])
hashes = np.zeros(N, dtype=hash_dtype)

df = pd.DataFrame(data={'hashes':hashes, 'other_stuff':np.zeros(N)})
idx = [0, 1]

## This fails
df.loc[idx, 'hashes'] = np.ones(len(idx), dtype=hash_dtype)
# LossySetitemError: 
# During handling of the above exception, another exception occurred:
# AssertionError
# AssertionError: Something has gone wrong, please report a bug at https://github.com/pandas-dev/pandas/issues

## This also files
print(df)
# TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

## This is ok
print(df['other_stuff'])

## This is a partial workaround
df['hashes'] = np.zeros(len(df), dtype=hash_dtype) # same errors with or without this line
df['hashes'].values[idx] = np.ones(len(idx), dtype=hash_dtype)

## But things still broken
print(df['hashes'])
# TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

## This works
print(df.loc[0, 'hashes'])

## This doesn't
print(df.loc[:, 'hashes'])
# TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

## OK
x = df['hashes']

## Not OK
x = df[['hashes', 'other_stuff']]
# TypeError: void() takes at least 1 positional argument (0 given)

Issue Description

Working with a numpy array with a structured type consisting of four 64 bit integers, there are various errors when getting/setting the associated data in a dataframe.

  • Trying to set values with df.loc[idx, 'hashes'] = get LossySetitemError, AssertionError: Something has gone wrong
  • can work-around by directly indexing into the underlying array df['hashes'].values[idx] = (but for other indexes would have to do something like df['hashes'].values[df.index.isin(idx)] = or use df.index.get_indexer)
  • printing/string reps broken, e.g. print(df) and print(df['hashes'])
  • trying to access df[['hashes', 'other_stuff']] TypeError: void() takes at least 1 positional argument (0 given)

Expected Behavior

can set values with .loc without assertion error
can print dataframe without exception

Installed Versions

INSTALLED VERSIONS

commit : 0691c5c
python : 3.12.7
python-bits : 64
OS : Linux
OS-release : 6.6.57-1-lts
Version : #1 SMP PREEMPT_DYNAMIC Thu, 17 Oct 2024 13:57:25 +0000
machine : x86_64
processor :
byteorder : little
LC_ALL : None
LANG : en_US.UTF-8
LOCALE : en_US.UTF-8

pandas : 2.2.3
numpy : 2.1.2
pytz : 2024.2
dateutil : 2.9.0.post0
pip : 24.2
Cython : 3.0.11
sphinx : None
IPython : 8.28.0
adbc-driver-postgresql: None
adbc-driver-sqlite : None
bs4 : 4.12.3
blosc : None
bottleneck : None
dataframe-api-compat : None
fastparquet : None
fsspec : None
html5lib : None
hypothesis : None
gcsfs : None
jinja2 : None
lxml.etree : 5.3.0
matplotlib : 3.9.2
numba : None
numexpr : None
odfpy : None
openpyxl : 3.1.5
pandas_gbq : None
psycopg2 : None
pymysql : None
pyarrow : None
pyreadstat : None
pytest : None
python-calamine : None
pyxlsb : None
s3fs : None
scipy : 1.14.1
sqlalchemy : None
tables : None
tabulate : None
xarray : None
xlrd : 2.0.1
xlsxwriter : 3.1.9
zstandard : 0.22.0
tzdata : 2024.2
qtpy : 2.4.1
pyqt5 : None

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugConstructorsSeries/DataFrame/Index/pd.array ConstructorsError ReportingIncorrect or improved errors from pandas

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions