Skip to content

Commit

Permalink
Add workaround for pandas.NA support with pandas<=2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
seisman committed Oct 10, 2024
1 parent 7a51128 commit 5d4bff5
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions pygmt/clib/conversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from collections.abc import Sequence

import numpy as np
import pandas as pd
from packaging.version import Version
from pygmt.exceptions import GMTInvalidInput


Expand Down Expand Up @@ -178,6 +180,10 @@ def vectors_to_arrays(vectors):
>>> [i.ndim for i in data] # Check that they are 1-D arrays
[1, 1, 1]
>>> series = pd.Series(data=[0, 4, pd.NA, 8, 6], dtype=pd.Int32Dtype())
>>> vectors_to_arrays([series])
[array([ 0., 4., nan, 8., 6.])]
>>> import datetime
>>> import pytest
>>> pa = pytest.importorskip("pyarrow")
Expand All @@ -198,15 +204,28 @@ def vectors_to_arrays(vectors):
True
>>> all(isinstance(a.dtype, np.dtypes.DateTime64DType) for a in arrays)
True
"""
dtypes = {
"date32[day][pyarrow]": np.datetime64,
"date64[ms][pyarrow]": np.datetime64,
}
arrays = []
for vector in vectors:
vec_dtype = str(getattr(vector, "dtype", ""))
arrays.append(np.ascontiguousarray(vector, dtype=dtypes.get(vec_dtype)))
if (
hasattr(vector, "isna")
and vector.isna().any()
and Version(pd.__version__) < Version("2.2")
):
# Workaround for dealing with pd.NA with pandas < 2.2.
# Bug report at: https://github.com/GenericMappingTools/pygmt/issues/2844
# Following SPEC0, pandas 2.1 will be dropped in 2025 Q3, so it's likey
# we can remove the workaround in PyGMT v0.17.0.
array = np.ascontiguousarray(vector.astype(float))
else:
vec_dtype = str(getattr(vector, "dtype", ""))
array = np.ascontiguousarray(vector, dtype=dtypes.get(vec_dtype))
arrays.append(array)
return arrays


Expand Down

0 comments on commit 5d4bff5

Please sign in to comment.