Skip to content

Commit 01922c5

Browse files
authored
Merge branch 'main' into putmask
2 parents 0adfcca + a885d67 commit 01922c5

File tree

113 files changed

+1146
-990
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+1146
-990
lines changed

.github/workflows/code-checks.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333

3434
steps:
3535
- name: Checkout
36-
uses: actions/checkout@v5
36+
uses: actions/checkout@v6
3737
with:
3838
fetch-depth: 0
3939

@@ -114,7 +114,7 @@ jobs:
114114

115115
steps:
116116
- name: Checkout
117-
uses: actions/checkout@v5
117+
uses: actions/checkout@v6
118118
with:
119119
fetch-depth: 0
120120

@@ -142,7 +142,7 @@ jobs:
142142

143143
steps:
144144
- name: Checkout
145-
uses: actions/checkout@v5
145+
uses: actions/checkout@v6
146146
with:
147147
fetch-depth: 0
148148

.github/workflows/codeql.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- python
2828

2929
steps:
30-
- uses: actions/checkout@v5
30+
- uses: actions/checkout@v6
3131
- uses: github/codeql-action/init@v4
3232
with:
3333
languages: ${{ matrix.language }}

.github/workflows/docbuild-and-upload.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636

3737
steps:
3838
- name: Checkout
39-
uses: actions/checkout@v5
39+
uses: actions/checkout@v6
4040
with:
4141
fetch-depth: 0
4242

.github/workflows/package-checks.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434

3535
steps:
3636
- name: Checkout
37-
uses: actions/checkout@v5
37+
uses: actions/checkout@v6
3838
with:
3939
fetch-depth: 0
4040

@@ -58,7 +58,7 @@ jobs:
5858
cancel-in-progress: true
5959
steps:
6060
- name: Checkout
61-
uses: actions/checkout@v5
61+
uses: actions/checkout@v6
6262
with:
6363
fetch-depth: 0
6464

.github/workflows/unit-tests.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ jobs:
139139

140140
steps:
141141
- name: Checkout
142-
uses: actions/checkout@v5
142+
uses: actions/checkout@v6
143143
with:
144144
fetch-depth: 0
145145

@@ -198,7 +198,7 @@ jobs:
198198

199199
steps:
200200
- name: Checkout
201-
uses: actions/checkout@v5
201+
uses: actions/checkout@v6
202202
with:
203203
fetch-depth: 0
204204

@@ -216,7 +216,7 @@ jobs:
216216
Linux-32-bit:
217217
runs-on: ubuntu-24.04
218218
container:
219-
image: quay.io/pypa/manylinux2014_i686
219+
image: quay.io/pypa/manylinux_2_28_i686
220220
options: --platform linux/386
221221
steps:
222222
- name: Checkout pandas Repo
@@ -336,7 +336,7 @@ jobs:
336336
PYTEST_TARGET: pandas
337337

338338
steps:
339-
- uses: actions/checkout@v5
339+
- uses: actions/checkout@v6
340340
with:
341341
fetch-depth: 0
342342

@@ -373,7 +373,7 @@ jobs:
373373
cancel-in-progress: true
374374
steps:
375375
- name: Checkout pandas Repo
376-
uses: actions/checkout@v5
376+
uses: actions/checkout@v6
377377
with:
378378
fetch-depth: 0
379379

.github/workflows/wheels.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
sdist_file: ${{ steps.save-path.outputs.sdist_name }}
5252
steps:
5353
- name: Checkout pandas
54-
uses: actions/checkout@v5
54+
uses: actions/checkout@v6
5555
with:
5656
fetch-depth: 0
5757

@@ -122,7 +122,7 @@ jobs:
122122
IS_SCHEDULE_DISPATCH: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
123123
steps:
124124
- name: Checkout pandas
125-
uses: actions/checkout@v5
125+
uses: actions/checkout@v6
126126
with:
127127
fetch-depth: 0
128128

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
.noseids
2222
.ipynb_checkpoints
2323
.tags
24+
tags
2425
.cache/
2526
.vscode/
2627

ci/code_checks.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,10 @@ if [[ -z "$CHECK" || "$CHECK" == "docstrings" ]]; then
7373
-i "pandas.Period.freq GL08" \
7474
-i "pandas.Period.ordinal GL08" \
7575
-i "pandas.errors.IncompatibleFrequency SA01,SS06,EX01" \
76-
-i "pandas.errors.InvalidVersion GL08" \
7776
-i "pandas.api.extensions.ExtensionArray.value_counts EX01,RT03,SA01" \
7877
-i "pandas.api.typing.DataFrameGroupBy.plot PR02" \
7978
-i "pandas.api.typing.SeriesGroupBy.plot PR02" \
8079
-i "pandas.api.typing.Resampler.quantile PR01,PR07" \
81-
-i "pandas.arrays.NumpyExtensionArray GL08" \
8280
-i "pandas.tseries.offsets.BDay PR02,SA01" \
8381
-i "pandas.tseries.offsets.BHalfYearBegin.is_on_offset GL08" \
8482
-i "pandas.tseries.offsets.BHalfYearBegin.n GL08" \

doc/source/whatsnew/v3.0.0.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ Other enhancements
233233
- Support reading Stata 102-format (Stata 1) dta files (:issue:`58978`)
234234
- Support reading Stata 110-format (Stata 7) dta files (:issue:`47176`)
235235
- Switched wheel upload to **PyPI Trusted Publishing** (OIDC) for release-tag pushes in ``wheels.yml``. (:issue:`61718`)
236+
- Added a new :meth:`DataFrame.from_arrow` method to import any Arrow-compatible
237+
tabular data object into a pandas :class:`DataFrame` through the
238+
`Arrow PyCapsule Protocol <https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html>`__ (:issue:`59631`)
236239

237240
.. ---------------------------------------------------------------------------
238241
.. _whatsnew_300.notable_bug_fixes:
@@ -747,8 +750,13 @@ Other API changes
747750
- :class:`Series` "flex" methods like :meth:`Series.add` no longer allow passing a :class:`DataFrame` for ``other``; use the DataFrame reversed method instead (:issue:`46179`)
748751
- :meth:`CategoricalIndex.append` no longer attempts to cast different-dtype indexes to the caller's dtype (:issue:`41626`)
749752
- :meth:`ExtensionDtype.construct_array_type` is now a regular method instead of a ``classmethod`` (:issue:`58663`)
753+
- Arithmetic operations between a :class:`Series`, :class:`Index`, or :class:`ExtensionArray` with a ``list`` now consistently wrap that list with an array equivalent to ``Series(my_list).array``. To do any other kind of type inference or casting, do so explicitly before operating (:issue:`62552`)
750754
- Comparison operations between :class:`Index` and :class:`Series` now consistently return :class:`Series` regardless of which object is on the left or right (:issue:`36759`)
751755
- Numpy functions like ``np.isinf`` that return a bool dtype when called on a :class:`Index` object now return a bool-dtype :class:`Index` instead of ``np.ndarray`` (:issue:`52676`)
756+
- Methods that can operate in-place (:meth:`~DataFrame.replace`, :meth:`~DataFrame.fillna`,
757+
:meth:`~DataFrame.ffill`, :meth:`~DataFrame.bfill`, :meth:`~DataFrame.interpolate`,
758+
:meth:`~DataFrame.where`, :meth:`~DataFrame.mask`, :meth:`~DataFrame.clip`) now return
759+
the modified DataFrame or Series (``self``) instead of ``None`` when ``inplace=True`` (:issue:`63207`)
752760

753761
.. ---------------------------------------------------------------------------
754762
.. _whatsnew_300.deprecations:
@@ -1243,6 +1251,7 @@ Groupby/resample/rolling
12431251
- Bug in :meth:`.DataFrameGroupBy.groups` and :meth:`.SeriesGroupby.groups` that would not respect groupby argument ``dropna`` (:issue:`55919`)
12441252
- Bug in :meth:`.DataFrameGroupBy.median` where nat values gave an incorrect result. (:issue:`57926`)
12451253
- Bug in :meth:`.DataFrameGroupBy.quantile` when ``interpolation="nearest"`` is inconsistent with :meth:`DataFrame.quantile` (:issue:`47942`)
1254+
- Bug in :meth:`.DataFrameGroupBy.sum` and :meth:`.SeriesGroupby.groups` returning ``NaN`` on overflow. These methods now returns ``inf`` or ``-inf`` on overflow. (:issue:`60303`)
12461255
- Bug in :meth:`.DataFrameGroupBy` reductions where non-Boolean values were allowed for the ``numeric_only`` argument; passing a non-Boolean value will now raise (:issue:`62778`)
12471256
- Bug in :meth:`.Resampler.interpolate` on a :class:`DataFrame` with non-uniform sampling and/or indices not aligning with the resulting resampled index would result in wrong interpolation (:issue:`21351`)
12481257
- Bug in :meth:`.Series.rolling` when used with a :class:`.BaseIndexer` subclass and computing min/max (:issue:`46726`)
@@ -1262,6 +1271,7 @@ Groupby/resample/rolling
12621271
- Bug in :meth:`DataFrameGroupby.transform` and :meth:`SeriesGroupby.transform` with a reducer and ``observed=False`` that coerces dtype to float when there are unobserved categories. (:issue:`55326`)
12631272
- Bug in :meth:`Rolling.apply` for ``method="table"`` where column order was not being respected due to the columns getting sorted by default. (:issue:`59666`)
12641273
- Bug in :meth:`Rolling.apply` where the applied function could be called on fewer than ``min_period`` periods if ``method="table"``. (:issue:`58868`)
1274+
- Bug in :meth:`Rolling.sem` computing incorrect results because it divided by ``sqrt((n - 1) * (n - ddof))`` instead of ``sqrt(n * (n - ddof))``. (:issue:`63180`)
12651275
- Bug in :meth:`Rolling.skew` incorrectly computing skewness for windows following outliers due to numerical instability. The calculation now properly handles catastrophic cancellation by recomputing affected windows (:issue:`47461`)
12661276
- Bug in :meth:`Series.resample` could raise when the date range ended shortly before a non-existent time. (:issue:`58380`)
12671277
- Bug in :meth:`Series.resample` raising error when resampling non-nanosecond resolutions out of bounds for nanosecond precision (:issue:`57427`)

pandas/_libs/groupby.pyx

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ from cython cimport (
55
)
66
from libc.math cimport (
77
NAN,
8+
isfinite,
89
sqrt,
910
)
1011
from libc.stdlib cimport (
@@ -778,9 +779,9 @@ def group_sum(
778779
if not isna_entry:
779780
nobs[lab, j] += 1
780781

781-
if sum_t is object:
782+
if sum_t is object or sum_t is int64_t or sum_t is uint64_t:
782783
# NB: this does not use 'compensation' like the non-object
783-
# track does.
784+
# and non-integer track does.
784785
if nobs[lab, j] == 1:
785786
# i.e. we haven't added anything yet; avoid TypeError
786787
# if e.g. val is a str and sumx[lab, j] is 0
@@ -793,13 +794,29 @@ def group_sum(
793794
y = val - compensation[lab, j]
794795
t = sumx[lab, j] + y
795796
compensation[lab, j] = t - sumx[lab, j] - y
796-
if compensation[lab, j] != compensation[lab, j]:
797-
# GH#53606
797+
798+
# Handle float overflow
799+
if (
800+
sum_t is float32_t or sum_t is float64_t
801+
) and not isfinite(compensation[lab, j]):
802+
# GH#53606; GH#60303
798803
# If val is +/- infinity compensation is NaN
799804
# which would lead to results being NaN instead
800805
# of +/- infinity. We cannot use util.is_nan
801806
# because of no gil
802807
compensation[lab, j] = 0
808+
809+
# Handle complex overflow
810+
if (
811+
sum_t is complex64_t or sum_t is complex128_t
812+
) and not isfinite(compensation[lab, j].real):
813+
compensation[lab, j].real = 0
814+
815+
if (
816+
sum_t is complex64_t or sum_t is complex128_t
817+
) and not isfinite(compensation[lab, j].imag):
818+
compensation[lab, j].imag = 0
819+
803820
sumx[lab, j] = t
804821
elif not skipna:
805822
if uses_mask:

0 commit comments

Comments
 (0)