Skip to content

Commit

Permalink
perf(python): remove pandas imports (#5286)
Browse files Browse the repository at this point in the history
  • Loading branch information
ritchie46 committed Oct 21, 2022
1 parent 33da4a8 commit 6013302
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 21 deletions.
12 changes: 6 additions & 6 deletions py-polars/polars/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from typing import TYPE_CHECKING, Any, Mapping, Sequence, overload

from polars.import_check import _PANDAS_AVAILABLE, pandas_mod
from polars.internals import DataFrame, Series

try:
Expand All @@ -18,14 +19,12 @@
except ImportError:
_PYARROW_AVAILABLE = False

try:
import pandas as pd

_PANDAS_AVAILABLE = True
except ImportError:
_PANDAS_AVAILABLE = False

if TYPE_CHECKING:
try: # noqa: SIM105
import pandas as pd
except ImportError:
pass
from polars.internals.type_aliases import Orientation


Expand Down Expand Up @@ -364,6 +363,7 @@ def from_pandas(
if not _PANDAS_AVAILABLE:
raise ImportError("'pandas' is required when using from_pandas().")

pd = pandas_mod()
if isinstance(df, (pd.Series, pd.DatetimeIndex)):
return Series._from_pandas("", df, nan_to_none=nan_to_none)
elif isinstance(df, pd.DataFrame):
Expand Down
15 changes: 15 additions & 0 deletions py-polars/polars/import_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import importlib.util
from typing import Any


def pandas_mod() -> Any:
import pandas as pd

return pd


def pkg_is_available(name: str) -> bool:
return importlib.util.find_spec(name) is not None


_PANDAS_AVAILABLE = pkg_is_available("pandas")
15 changes: 7 additions & 8 deletions py-polars/polars/internals/dataframe/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
py_type_to_dtype,
)
from polars.exceptions import NoRowsReturned, TooManyRowsReturned
from polars.import_check import _PANDAS_AVAILABLE, pandas_mod
from polars.internals.construction import (
arrow_to_pydf,
dict_to_pydf,
Expand Down Expand Up @@ -88,13 +89,6 @@
except ImportError:
_PYARROW_AVAILABLE = False

try:
import pandas as pd

_PANDAS_AVAILABLE = True
except ImportError:
_PANDAS_AVAILABLE = False

if sys.version_info >= (3, 8):
from typing import Literal
else:
Expand All @@ -106,6 +100,11 @@
from typing_extensions import TypeAlias

if TYPE_CHECKING:
try: # noqa: SIM105
import pandas as pd
except ImportError:
pass

from polars.internals.type_aliases import (
AsofJoinStrategy,
AvroCompression,
Expand Down Expand Up @@ -303,7 +302,7 @@ def __init__(
elif isinstance(data, pli.Series):
self._df = series_to_pydf(data, columns=columns)

elif _PANDAS_AVAILABLE and isinstance(data, pd.DataFrame):
elif _PANDAS_AVAILABLE and isinstance(data, pandas_mod().DataFrame):
if not _PYARROW_AVAILABLE: # pragma: no cover
raise ImportError(
"'pyarrow' is required for converting a pandas DataFrame to a"
Expand Down
16 changes: 9 additions & 7 deletions py-polars/polars/internals/series/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
py_type_to_dtype,
supported_numpy_char_code,
)
from polars.import_check import _PANDAS_AVAILABLE, pandas_mod
from polars.internals.construction import (
arrow_to_pyseries,
numpy_to_pyseries,
Expand Down Expand Up @@ -83,14 +84,13 @@
except ImportError:
_PYARROW_AVAILABLE = False

try:
import pandas as pd

_PANDAS_AVAILABLE = True
except ImportError:
_PANDAS_AVAILABLE = False

if TYPE_CHECKING:
try: # noqa: SIM105
import pandas as pd
except ImportError:
pass

from polars.internals.type_aliases import (
ComparisonOperator,
FillNullStrategy,
Expand Down Expand Up @@ -236,7 +236,9 @@ def __init__(
self._s = sequence_to_pyseries(
name, values, dtype=dtype, strict=strict, dtype_if_empty=dtype_if_empty
)
elif _PANDAS_AVAILABLE and isinstance(values, (pd.Series, pd.DatetimeIndex)):
elif _PANDAS_AVAILABLE and isinstance(
values, (pandas_mod().Series, pandas_mod().DatetimeIndex)
):
self._s = pandas_to_pyseries(name, values)
else:
raise ValueError("Series constructor not called properly.")
Expand Down

0 comments on commit 6013302

Please sign in to comment.