-
- Notifications
You must be signed in to change notification settings - Fork 19.2k
Description
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 pandas as pd s1 = pd.Series( [23, 22, 21], index=pd.Index(["a", "b", "c"], name="index a"), dtype=pd.Int64Dtype() ) s2 = pd.Series( [21, 22, 23], index=pd.Index(["a", "b", "c"], name="index b", dtype=pd.StringDtype()), dtype=pd.Int64Dtype(), ) s1 - s2
Issue Description
This example with two series with a nullable integer data type and a index with different names and of differing data types, on with a nullable string datatype and object datatype fails with and error from pandas._libs.algos.ensure_platform_int()
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[170], line 10 1 s1 = pd.Series( 2 [23, 22, 21], index=pd.Index(["a", "b", "c"], name="index a"), dtype=pd.Int64Dtype() 3 ) 4 s2 = pd.Series( 5 [21, 22, 23], 6 index=pd.Index(["a", "b", "c"], name="index b", dtype=pd.StringDtype()), 7 dtype=pd.Int64Dtype(), 8 ) ---> 10 s1 - s2 File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/ops/common.py:76, in _unpack_zerodim_and_defer.<locals>.new_method(self, other) 72 return NotImplemented 74 other = item_from_zerodim(other) ---> 76 return method(self, other) File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/arraylike.py:194, in OpsMixin.__sub__(self, other) 192 @unpack_zerodim_and_defer("__sub__") 193 def __sub__(self, other): --> 194 return self._arith_method(other, operator.sub) File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/series.py:5814, in Series._arith_method(self, other, op) 5813 def _arith_method(self, other, op): -> 5814 self, other = self._align_for_op(other) 5815 return base.IndexOpsMixin._arith_method(self, other, op) File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/series.py:5844, in Series._align_for_op(self, right, align_asobject) 5841 left = left.astype(object) 5842 right = right.astype(object) -> 5844 left, right = left.align(right, copy=False) 5846 return left, right File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/generic.py:10095, in NDFrame.align(self, other, join, axis, level, copy, fill_value, method, limit, fill_axis, broadcast_axis) 10082 left, _right, join_index = self._align_frame( 10083 other, 10084 join=join, (...) 10091 fill_axis=fill_axis, 10092 ) 10094 elif isinstance(other, ABCSeries): > 10095 left, _right, join_index = self._align_series( 10096 other, 10097 join=join, 10098 axis=axis, 10099 level=level, 10100 copy=copy, 10101 fill_value=fill_value, 10102 method=method, 10103 limit=limit, 10104 fill_axis=fill_axis, 10105 ) 10106 else: # pragma: no cover 10107 raise TypeError(f"unsupported type: {type(other)}") File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/generic.py:10224, in NDFrame._align_series(self, other, join, axis, level, copy, fill_value, method, limit, fill_axis) 10221 new_mgr = self._mgr.reindex_indexer(join_index, lidx, axis=1, copy=copy) 10222 left = self._constructor_from_mgr(new_mgr, axes=new_mgr.axes) > 10224 right = other._reindex_indexer(join_index, ridx, copy) 10226 else: 10227 # one has > 1 ndim 10228 fdata = self._mgr File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/series.py:4779, in Series._reindex_indexer(self, new_index, indexer, copy) 4776 return self.copy(deep=copy) 4777 return self -> 4779 new_values = algorithms.take_nd( 4780 self._values, indexer, allow_fill=True, fill_value=None 4781 ) 4782 return self._constructor(new_values, index=new_index, copy=False) File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/array_algos/take.py:115, in take_nd(arr, indexer, axis, fill_value, allow_fill) 110 arr = cast("NDArrayBackedExtensionArray", arr) 111 return arr.take( 112 indexer, fill_value=fill_value, allow_fill=allow_fill, axis=axis 113 ) --> 115 return arr.take(indexer, fill_value=fill_value, allow_fill=allow_fill) 117 arr = np.asarray(arr) 118 return _take_nd_ndarray(arr, indexer, axis, fill_value, allow_fill) File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/arrays/masked.py:905, in BaseMaskedArray.take(self, indexer, allow_fill, fill_value, axis) 894 def take( 895 self, 896 indexer, (...) 902 # we always fill with 1 internally 903 # to avoid upcasting 904 data_fill_value = self._internal_fill_value if isna(fill_value) else fill_value --> 905 result = take( 906 self._data, 907 indexer, 908 fill_value=data_fill_value, 909 allow_fill=allow_fill, 910 axis=axis, 911 ) 913 mask = take( 914 self._mask, indexer, fill_value=True, allow_fill=allow_fill, axis=axis 915 ) 917 # if we are filling 918 # we only fill where the indexer is null 919 # not existing missing values 920 # TODO(jreback) what if we have a non-na float as a fill value? File ~/beftett/.venv/lib/python3.10/site-packages/pandas/core/algorithms.py:1309, in take(arr, indices, axis, allow_fill, fill_value) 1306 if not is_array_like(arr): 1307 arr = np.asarray(arr) -> 1309 indices = ensure_platform_int(indices) 1311 if allow_fill: 1312 # Pandas style, -1 means NA 1313 validate_indices(indices, arr.shape[axis]) File pandas/_libs/algos_common_helper.pxi:22, in pandas._libs.algos.ensure_platform_int() TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'
If any of these three conditions is removed, the subtraction succeeds.
Expected Behavior
The subtraction should succeed.
Installed Versions
commit: 2a953cf
python: 3.10.9.final.0
python-bits : 64
OS : Linux
OS-release : 5.15.133+
Version : #1 SMP Sat Dec 30 11:18:04 UTC 2023
machine : x86_64
processor : x86_64
byteorder : little
LC_ALL : en_US.UTF-8
LANG : en_US.UTF-8
LOCALE : en_US.UTF-8
pandas : 2.1.3
numpy : 1.24.4
pytz : 2023.3.post1
dateutil : 2.8.2
setuptools : 69.0.3
pip : 23.2.1
Cython : None
pytest : 7.4.4
hypothesis : 6.91.0
sphinx : None
blosc : None
feather : None
xlsxwriter : None
lxml.etree : 5.0.0
html5lib : None
pymysql : None
psycopg2 : None
jinja2 : 3.1.2
IPython : 8.19.0
pandas_datareader : None
bs4 : 4.12.2
bottleneck : None
dataframe-api-compat: None
fastparquet : None
fsspec : 2023.12.2
gcsfs : 2023.12.2post1
matplotlib : 3.8.2
numba : 0.57.1
numexpr : None
odfpy : None
openpyxl : None
pandas_gbq : None
pyarrow : 13.0.0
pyreadstat : None
pyxlsb : None
s3fs : None
scipy : 1.11.4
sqlalchemy : 2.0.24
tables : None
tabulate : None
xarray : 2023.8.0
xlrd : None
zstandard : None
tzdata : 2023.4
qtpy : None
pyqt5 : None