This is an automated email from the ASF dual-hosted git repository.

brycemecum pushed a commit to branch maint-19.0.x
in repository https://gitbox.apache.org/repos/asf/arrow.git

commit 2dd39542d252e8f81228090fe48b3c7e7133559c
Author: Joris Van den Bossche <[email protected]>
AuthorDate: Thu Jan 30 13:16:04 2025 +0100

    GH-45296: [Python] Only enable the string dtype on pandas export for 
pandas>=2.3 (#45383)
    
    The option already exists in pandas 2.2, but for that version our code does 
not work, so restricting it to pandas >= 2.3
    
    * GitHub Issue: #45296
    
    Authored-by: Joris Van den Bossche <[email protected]>
    Signed-off-by: Raúl Cumplido <[email protected]>
---
 python/pyarrow/pandas-shim.pxi | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/python/pyarrow/pandas-shim.pxi b/python/pyarrow/pandas-shim.pxi
index 74f0d981b5..15997129b2 100644
--- a/python/pyarrow/pandas-shim.pxi
+++ b/python/pyarrow/pandas-shim.pxi
@@ -38,7 +38,7 @@ cdef class _PandasAPIShim(object):
         object _array_like_types, _is_extension_array_dtype, _lock
         bint has_sparse
         bint _pd024
-        bint _is_v1, _is_ge_v21, _is_ge_v3
+        bint _is_v1, _is_ge_v21, _is_ge_v23, _is_ge_v3, _is_ge_v3_strict
 
     def __init__(self):
         self._lock = Lock()
@@ -79,6 +79,7 @@ cdef class _PandasAPIShim(object):
 
         self._is_v1 = self._loose_version < Version('2.0.0')
         self._is_ge_v21 = self._loose_version >= Version('2.1.0')
+        self._is_ge_v23 = self._loose_version >= Version('2.3.0')
         self._is_ge_v3 = self._loose_version >= Version('3.0.0.dev0')
 
         self._compat_module = pdcompat
@@ -170,10 +171,28 @@ cdef class _PandasAPIShim(object):
         self._check_import()
         return self._is_ge_v21
 
+    def is_ge_v23(self):
+        self._check_import()
+        return self._is_ge_v23
+
     def is_ge_v3(self):
         self._check_import()
         return self._is_ge_v3
 
+    def is_ge_v3_strict(self):
+        self._check_import()
+        return self._is_ge_v3_strict
+
+    def uses_string_dtype(self):
+        if self.is_ge_v3_strict():
+            return True
+        try:
+            if self.is_ge_v23() and self.pd.options.future.infer_string:
+                return True
+        except:
+            pass
+        return False
+
     @property
     def categorical_type(self):
         self._check_import()

Reply via email to