Skip to content

Commit 9d22719

Browse files
committed
Backport PR pandas-dev#54110: CI: Fix pyarrow nightly build
1 parent bdb509f commit 9d22719

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

.github/actions/build_pandas/action.yml

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ runs:
88
run: |
99
micromamba info
1010
micromamba list
11+
pip list --pre
1112
shell: bash -el {0}
1213

1314
- name: Build Pandas

pandas/compat/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
pa_version_under8p0,
3232
pa_version_under9p0,
3333
pa_version_under11p0,
34+
pa_version_under13p0,
3435
)
3536

3637

@@ -161,6 +162,7 @@ def get_lzma_file() -> type[pandas.compat.compressors.LZMAFile]:
161162
"pa_version_under8p0",
162163
"pa_version_under9p0",
163164
"pa_version_under11p0",
165+
"pa_version_under13p0",
164166
"IS64",
165167
"PY39",
166168
"PY310",

pandas/compat/pyarrow.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@
77
try:
88
import pyarrow as pa
99

10-
_pa_version = pa.__version__
11-
_palv = Version(_pa_version)
10+
_palv = Version(Version(pa.__version__).base_version)
1211
pa_version_under7p0 = _palv < Version("7.0.0")
1312
pa_version_under8p0 = _palv < Version("8.0.0")
1413
pa_version_under9p0 = _palv < Version("9.0.0")
1514
pa_version_under10p0 = _palv < Version("10.0.0")
1615
pa_version_under11p0 = _palv < Version("11.0.0")
16+
pa_version_under13p0 = _palv < Version("13.0.0")
1717
except ImportError:
1818
pa_version_under7p0 = True
1919
pa_version_under8p0 = True
2020
pa_version_under9p0 = True
2121
pa_version_under10p0 = True
2222
pa_version_under11p0 = True
23+
pa_version_under13p0 = True

pandas/core/arrays/arrow/array.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
pa_version_under8p0,
4141
pa_version_under9p0,
4242
pa_version_under11p0,
43+
pa_version_under13p0,
4344
)
4445
from pandas.util._decorators import doc
4546
from pandas.util._validators import validate_fillna_kwargs
@@ -1252,6 +1253,8 @@ def _reduce(self, name: str, *, skipna: bool = True, **kwargs):
12521253

12531254
data_to_reduce = self._data
12541255

1256+
cast_kwargs = {} if pa_version_under13p0 else {"safe": False}
1257+
12551258
if name in ["any", "all"] and (
12561259
pa.types.is_integer(pa_type)
12571260
or pa.types.is_floating(pa_type)
@@ -1327,9 +1330,15 @@ def pyarrow_meth(data, skip_nulls, **kwargs):
13271330
if name in ["min", "max", "sum"] and pa.types.is_duration(pa_type):
13281331
result = result.cast(pa_type)
13291332
if name in ["median", "mean"] and pa.types.is_temporal(pa_type):
1333+
if not pa_version_under13p0:
1334+
nbits = pa_type.bit_width
1335+
if nbits == 32:
1336+
result = result.cast(pa.int32(), **cast_kwargs)
1337+
else:
1338+
result = result.cast(pa.int64(), **cast_kwargs)
13301339
result = result.cast(pa_type)
13311340
if name in ["std", "sem"] and pa.types.is_temporal(pa_type):
1332-
result = result.cast(pa.int64())
1341+
result = result.cast(pa.int64(), **cast_kwargs)
13331342
if pa.types.is_duration(pa_type):
13341343
result = result.cast(pa_type)
13351344
elif pa.types.is_time(pa_type):

pandas/tests/io/test_parquet.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from pandas.compat.pyarrow import (
1515
pa_version_under7p0,
1616
pa_version_under8p0,
17+
pa_version_under13p0,
1718
)
1819
import pandas.util._test_decorators as td
1920

@@ -998,14 +999,15 @@ def test_read_dtype_backend_pyarrow_config(self, pa, df_full):
998999

9991000
pa_table = pyarrow.Table.from_pandas(df)
10001001
expected = pa_table.to_pandas(types_mapper=pd.ArrowDtype)
1001-
# pyarrow infers datetimes as us instead of ns
1002-
expected["datetime"] = expected["datetime"].astype("timestamp[us][pyarrow]")
1003-
expected["datetime_with_nat"] = expected["datetime_with_nat"].astype(
1004-
"timestamp[us][pyarrow]"
1005-
)
1006-
expected["datetime_tz"] = expected["datetime_tz"].astype(
1007-
pd.ArrowDtype(pyarrow.timestamp(unit="us", tz="Europe/Brussels"))
1008-
)
1002+
if pa_version_under13p0:
1003+
# pyarrow infers datetimes as us instead of ns
1004+
expected["datetime"] = expected["datetime"].astype("timestamp[us][pyarrow]")
1005+
expected["datetime_with_nat"] = expected["datetime_with_nat"].astype(
1006+
"timestamp[us][pyarrow]"
1007+
)
1008+
expected["datetime_tz"] = expected["datetime_tz"].astype(
1009+
pd.ArrowDtype(pyarrow.timestamp(unit="us", tz="Europe/Brussels"))
1010+
)
10091011

10101012
check_round_trip(
10111013
df,

0 commit comments

Comments
 (0)