Skip to content

Commit 5526526

Browse files
committed
more fixes
1 parent 5520b37 commit 5526526

File tree

3 files changed

+37
-26
lines changed

3 files changed

+37
-26
lines changed

doc/source/whatsnew/v0.24.0.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -835,5 +835,5 @@ Other
835835
- :meth:`DataFrame.nlargest` and :meth:`DataFrame.nsmallest` now returns the correct n values when keep != 'all' also when tied on the first columns (:issue:`22752`)
836836
- :meth:`~pandas.io.formats.style.Styler.bar` now also supports tablewise application (in addition to rowwise and columnwise) with ``axis=None`` and setting clipping range with ``vmin`` and ``vmax`` (:issue:`21548` and :issue:`21526`). ``NaN`` values are also handled properly.
837837
- Logical operations ``&, |, ^`` between :class:`Series` and :class:`Index` will no longer raise ``ValueError`` (:issue:`22092`)
838-
- Checking PEP 3141 numbers in `pandas.api.types.is_scalar` function returns ``True`` (:issue:`22903`)
839-
-
838+
- Checking PEP 3141 numbers in :func:`~pandas.api.types.is_scalar` function returns ``True`` (:issue:`22903`)
839+
-

pandas/_libs/lib.pyx

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# -*- coding: utf-8 -*-
22
from decimal import Decimal
3+
from fractions import Fraction
4+
from numbers import Number
5+
36
import sys
47

58
import cython
@@ -15,9 +18,6 @@ from cpython.datetime cimport (PyDateTime_Check, PyDate_Check,
1518
PyDateTime_IMPORT)
1619
PyDateTime_IMPORT
1720

18-
from fractions import Fraction
19-
from numbers import Number
20-
2121
import numpy as np
2222
cimport numpy as cnp
2323
from numpy cimport (ndarray, PyArray_NDIM, PyArray_GETITEM,
@@ -112,13 +112,22 @@ def is_scalar(val: object) -> bint:
112112

113113
Parameters
114114
----------
115-
val : numpy array scalar (e.g. np.int64), Python builtin numerics,
116-
Python builtin byte arrays and strings, None,
117-
instances of datetime.datetime, instances of datetime.timedelta,
118-
Period, instances of decimal.Decimal, Interval, DateOffset,
119-
Fraction, Number
120-
The value to be checked.
115+
val : input argument of any type
121116

117+
This includes:
118+
- numpy array scalar (e.g. np.int64)
119+
- Python builtin numerics
120+
- Python builtin byte arrays and strings
121+
- None
122+
- instances of datetime.datetime
123+
- instances of datetime.timedelta
124+
- Period
125+
- instances of decimal.Decimal
126+
- Interval
127+
- DateOffset
128+
- Fraction
129+
- Number.
130+
122131
Returns
123132
-------
124133
True if the given value is scalar, False otherwise.
@@ -128,23 +137,30 @@ def is_scalar(val: object) -> bint:
128137
>>> dt = pd.datetime.datetime(2018,10,3)
129138
>>> pd.is_scalar(dt)
130139
True
131-
132-
>>> from fractions import Fraction
133-
>>> from numbers import Number
140+
>>> pd.api.types.is_scalar([2,3])
141+
False
142+
143+
>>> pd.api.types.is_scalar({0:1,2:3})
144+
False
134145

135-
>>> fract = Fraction(3,5)
136-
>>> pd.is_scalar(fract)
146+
>>> pd.api.types.is_scalar((0,2))
147+
False
148+
149+
pandas supports PEP 3141 numbers:
150+
151+
>>> from fractions import Fraction
152+
>>> pd.api.types.is_scalar(Fraction(3,5))
137153
True
138154

139-
>>> num = Number(2)
140-
>>> pd.is_scalar(num)
155+
>>> from numbers import Number
156+
>>> pd.api.types.is_scalar(Number())
141157
True
142158

143159
"""
144160

145161
return (cnp.PyArray_IsAnyScalar(val)
146162
# As of numpy-1.9, PyArray_IsAnyScalar misses bytearrays on Py3.
147-
or isinstance(val, bytes)
163+
or isinstance(val,(bytes, Number, Fraction))
148164
# We differ from numpy (as of 1.10), which claims that None is
149165
# not scalar in np.isscalar().
150166
or val is None
@@ -155,8 +171,6 @@ def is_scalar(val: object) -> bint:
155171
or is_decimal(val)
156172
or is_interval(val)
157173
or util.is_offset_object(val)
158-
or isinstance(val, Number)
159-
or isinstance(val, Fraction))
160174

161175
def item_from_zerodim(val: object) -> object:
162176
"""

pandas/tests/dtypes/test_inference.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,8 @@ def test_is_scalar_builtin_scalars(self):
11211121
assert is_scalar(None)
11221122
assert is_scalar(True)
11231123
assert is_scalar(False)
1124+
assert is_scalar(Number())
1125+
assert is_scalar(Fraction())
11241126
assert is_scalar(0.)
11251127
assert is_scalar(np.nan)
11261128
assert is_scalar('foobar')
@@ -1185,11 +1187,6 @@ def test_is_scalar_pandas_containers(self):
11851187
assert not is_scalar(Index([]))
11861188
assert not is_scalar(Index([1]))
11871189

1188-
def tes_is_scalar_pep_3141(self):
1189-
assert is_scalar(Number())
1190-
assert is_scalar(Fraction())
1191-
1192-
11931190
def test_datetimeindex_from_empty_datetime64_array():
11941191
for unit in ['ms', 'us', 'ns']:
11951192
idx = DatetimeIndex(np.array([], dtype='datetime64[%s]' % unit))

0 commit comments

Comments
 (0)