Skip to content

Commit 20d5727

Browse files
committed
Merge branch 'main' into hotfix/cmp0xff/62063-def-of-scalar
2 parents 470d093 + 5b6140c commit 20d5727

File tree

6 files changed

+61
-27
lines changed

6 files changed

+61
-27
lines changed

doc/source/user_guide/migration-3-strings.rst

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,37 @@ the :meth:`~pandas.Series.str.decode` method now has a ``dtype`` parameter to be
315315
able to specify object dtype instead of the default of string dtype for this use
316316
case.
317317

318+
:meth:`Series.values` now returns an :class:`~pandas.api.extensions.ExtensionArray`
319+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
320+
321+
With object dtype, using ``.values`` on a Series will return the underlying NumPy array.
322+
323+
.. code-block:: python
324+
325+
>>> ser = pd.Series(["a", "b", np.nan], dtype="object")
326+
>>> type(ser.values)
327+
<class 'numpy.ndarray'>
328+
329+
However with the new string dtype, the underlying ExtensionArray is returned instead.
330+
331+
.. code-block:: python
332+
333+
>>> ser = pd.Series(["a", "b", pd.NA], dtype="str")
334+
>>> ser.values
335+
<ArrowStringArray>
336+
['a', 'b', nan]
337+
Length: 3, dtype: str
338+
339+
If your code requires a NumPy array, you should use :meth:`Series.to_numpy`.
340+
341+
.. code-block:: python
342+
343+
>>> ser = pd.Series(["a", "b", pd.NA], dtype="str")
344+
>>> ser.to_numpy()
345+
['a' 'b' nan]
346+
347+
In general, you should always prefer :meth:`Series.to_numpy` to get a NumPy array or :meth:`Series.array` to get an ExtensionArray over using :meth:`Series.values`.
348+
318349
Notable bug fixes
319350
~~~~~~~~~~~~~~~~~
320351

pandas/tests/groupby/test_libgroupby.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ def test_cython_group_mean_not_datetimelike_but_has_NaT_values():
285285
)
286286

287287

288-
def test_cython_group_mean_Inf_at_begining_and_end():
288+
def test_cython_group_mean_Inf_at_beginning_and_end():
289289
# GH 50367
290290
actual = np.array([[np.nan, np.nan], [np.nan, np.nan]], dtype="float64")
291291
counts = np.array([0, 0], dtype="int64")
@@ -314,7 +314,7 @@ def test_cython_group_mean_Inf_at_begining_and_end():
314314
([[np.inf], [-np.inf], [-np.inf]], [[np.inf], [-np.inf]]),
315315
],
316316
)
317-
def test_cython_group_sum_Inf_at_begining_and_end(values, out):
317+
def test_cython_group_sum_Inf_at_beginning_and_end(values, out):
318318
# GH #53606
319319
actual = np.array([[np.nan], [np.nan]], dtype="float64")
320320
counts = np.array([0, 0], dtype="int64")

pandas/tests/reshape/test_from_dummies.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def test_error_contains_non_dummies():
100100
from_dummies(dummies)
101101

102102

103-
def test_error_with_prefix_multiple_seperators():
103+
def test_error_with_prefix_multiple_separators():
104104
dummies = DataFrame(
105105
{
106106
"col1_a": [1, 0, 1],

scripts/tests/test_validate_min_versions_in_sync.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,36 @@
1010
pin_min_versions_to_yaml_file,
1111
)
1212

13+
DATA_PATH = pathlib.Path(__file__).parents[2] / "scripts/tests/data/"
14+
1315

1416
@pytest.mark.parametrize(
1517
"src_toml, src_yaml, expected_yaml",
1618
[
1719
(
18-
pathlib.Path("scripts/tests/data/deps_minimum.toml"),
19-
pathlib.Path("scripts/tests/data/deps_unmodified_random.yaml"),
20-
pathlib.Path("scripts/tests/data/deps_expected_random.yaml"),
20+
DATA_PATH / "deps_minimum.toml",
21+
DATA_PATH / "deps_unmodified_random.yaml",
22+
DATA_PATH / "deps_expected_random.yaml",
2123
),
2224
(
23-
pathlib.Path("scripts/tests/data/deps_minimum.toml"),
24-
pathlib.Path("scripts/tests/data/deps_unmodified_same_version.yaml"),
25-
pathlib.Path("scripts/tests/data/deps_expected_same_version.yaml"),
25+
DATA_PATH / "deps_minimum.toml",
26+
DATA_PATH / "deps_unmodified_same_version.yaml",
27+
DATA_PATH / "deps_expected_same_version.yaml",
2628
),
2729
(
28-
pathlib.Path("scripts/tests/data/deps_minimum.toml"),
29-
pathlib.Path("scripts/tests/data/deps_unmodified_duplicate_package.yaml"),
30-
pathlib.Path("scripts/tests/data/deps_expected_duplicate_package.yaml"),
30+
DATA_PATH / "deps_minimum.toml",
31+
DATA_PATH / "deps_unmodified_duplicate_package.yaml",
32+
DATA_PATH / "deps_expected_duplicate_package.yaml",
3133
),
3234
(
33-
pathlib.Path("scripts/tests/data/deps_minimum.toml"),
34-
pathlib.Path("scripts/tests/data/deps_unmodified_no_version.yaml"),
35-
pathlib.Path("scripts/tests/data/deps_expected_no_version.yaml"),
35+
DATA_PATH / "deps_minimum.toml",
36+
DATA_PATH / "deps_unmodified_no_version.yaml",
37+
DATA_PATH / "deps_expected_no_version.yaml",
3638
),
3739
(
38-
pathlib.Path("scripts/tests/data/deps_minimum.toml"),
39-
pathlib.Path("scripts/tests/data/deps_unmodified_range.yaml"),
40-
pathlib.Path("scripts/tests/data/deps_expected_range.yaml"),
40+
DATA_PATH / "deps_minimum.toml",
41+
DATA_PATH / "deps_unmodified_range.yaml",
42+
DATA_PATH / "deps_expected_range.yaml",
4143
),
4244
],
4345
)

scripts/tests/test_validate_unwanted_patterns.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class TestStringsWithWrongPlacedWhitespace:
1010
"data",
1111
[
1212
(
13-
"""
13+
r"""
1414
msg = (
1515
"foo\n"
1616
" bar"

scripts/validate_min_versions_in_sync.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,20 @@
2323

2424
from scripts.generate_pip_deps_from_conda import CONDA_TO_PIP
2525

26-
DOC_PATH = pathlib.Path("doc/source/getting_started/install.rst").resolve()
26+
BASE_PATH = pathlib.Path(__file__).parents[1]
27+
DOC_PATH = (BASE_PATH / "doc/source/getting_started/install.rst").resolve()
2728
CI_PATH = next(
28-
pathlib.Path("ci/deps").absolute().glob("actions-*-minimum_versions.yaml")
29+
(BASE_PATH / "ci/deps").absolute().glob("actions-*-minimum_versions.yaml")
2930
)
30-
CODE_PATH = pathlib.Path("pandas/compat/_optional.py").resolve()
31-
SETUP_PATH = pathlib.Path("pyproject.toml").resolve()
32-
YAML_PATH = pathlib.Path("ci/deps")
33-
ENV_PATH = pathlib.Path("environment.yml")
31+
CODE_PATH = (BASE_PATH / "pandas/compat/_optional.py").resolve()
32+
SETUP_PATH = (BASE_PATH / "pyproject.toml").resolve()
33+
YAML_PATH = BASE_PATH / "ci/deps"
34+
ENV_PATH = BASE_PATH / "environment.yml"
3435
EXCLUDE_DEPS = {"tzdata", "pyqt", "pyqt5"}
3536
# pandas package is not available
3637
# in pre-commit environment
37-
sys.path.append("pandas/compat")
38-
sys.path.append("pandas/util")
38+
sys.path.append(str(BASE_PATH / "pandas/compat"))
39+
sys.path.append(str(BASE_PATH / "pandas/util"))
3940
import _exceptions
4041
import version
4142

0 commit comments

Comments
 (0)