Skip to content

Commit 760df40

Browse files
committed
REF: Replace lib.list_to_object_array with construct_1d_array_from_listlike
1 parent 275c984 commit 760df40

File tree

7 files changed

+17
-30
lines changed

7 files changed

+17
-30
lines changed

pandas/_libs/lib.pyx

-17
Original file line numberDiff line numberDiff line change
@@ -148,23 +148,6 @@ def item_from_zerodim(object val):
148148
return util.unbox_if_zerodim(val)
149149

150150

151-
@cython.wraparound(False)
152-
@cython.boundscheck(False)
153-
cpdef ndarray[object] list_to_object_array(list obj):
154-
"""
155-
Convert list to object ndarray. Seriously can\'t believe
156-
I had to write this function.
157-
"""
158-
cdef:
159-
Py_ssize_t i, n = len(obj)
160-
ndarray[object] arr = np.empty(n, dtype=object)
161-
162-
for i in range(n):
163-
arr[i] = obj[i]
164-
165-
return arr
166-
167-
168151
@cython.wraparound(False)
169152
@cython.boundscheck(False)
170153
def fast_unique(ndarray[object] values):

pandas/_libs/src/inference.pyx

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ from tslibs.conversion cimport convert_to_tsobject
77
from tslibs.timedeltas cimport convert_to_timedelta64
88
from tslibs.timezones cimport get_timezone
99
from datetime import datetime, timedelta
10+
from pandas.core.dtypes.cast import construct_1d_array_from_listlike
11+
1012
iNaT = util.get_nat()
1113

1214
cdef bint PY2 = sys.version_info[0] == 2
@@ -349,7 +351,7 @@ def infer_dtype(object value, bint skipna=False):
349351
else:
350352
if not isinstance(value, list):
351353
value = list(value)
352-
values = list_to_object_array(value)
354+
values = construct_1d_array_from_listlike(value)
353355

354356
values = getattr(values, 'values', values)
355357
val = _try_infer_map(values)

pandas/core/algorithms.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from warnings import warn, catch_warnings
77
import numpy as np
88

9-
from pandas.core.dtypes.cast import maybe_promote
9+
from pandas.core.dtypes.cast import (
10+
maybe_promote, construct_1d_array_from_listlike)
1011
from pandas.core.dtypes.generic import (
1112
ABCSeries, ABCIndex,
1213
ABCIndexClass, ABCCategorical)
@@ -171,7 +172,7 @@ def _ensure_arraylike(values):
171172
if inferred in ['mixed', 'string', 'unicode']:
172173
if isinstance(values, tuple):
173174
values = list(values)
174-
values = lib.list_to_object_array(values)
175+
values = construct_1d_array_from_listlike(values)
175176
else:
176177
values = np.asarray(values)
177178
return values
@@ -401,7 +402,7 @@ def isin(comps, values):
401402
.format(values_type=type(values).__name__))
402403

403404
if not isinstance(values, (ABCIndex, ABCSeries, np.ndarray)):
404-
values = lib.list_to_object_array(list(values))
405+
values = construct_1d_array_from_listlike(list(values))
405406

406407
comps, dtype, _ = _ensure_data(comps)
407408
values, _, _ = _ensure_data(values, dtype=dtype)

pandas/core/dtypes/cast.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def maybe_convert_platform(values):
4242
""" try to do platform conversion, allow ndarray or list here """
4343

4444
if isinstance(values, (list, tuple)):
45-
values = lib.list_to_object_array(list(values))
45+
values = construct_1d_array_from_listlike(list(values))
4646
if getattr(values, 'dtype', None) == np.object_:
4747
if hasattr(values, '_values'):
4848
values = values._values

pandas/core/ops.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
is_list_like,
3434
is_scalar,
3535
_ensure_object)
36-
from pandas.core.dtypes.cast import maybe_upcast_putmask, find_common_type
36+
from pandas.core.dtypes.cast import (
37+
maybe_upcast_putmask, find_common_type, construct_1d_array_from_listlike)
3738
from pandas.core.dtypes.generic import (
3839
ABCSeries,
3940
ABCDataFrame,
@@ -750,7 +751,7 @@ def wrapper(left, right, name=name, na_op=na_op):
750751

751752
def _comp_method_OBJECT_ARRAY(op, x, y):
752753
if isinstance(y, list):
753-
y = lib.list_to_object_array(y)
754+
y = construct_1d_array_from_listlike(y)
754755
if isinstance(y, (np.ndarray, ABCSeries, ABCIndex)):
755756
if not is_object_dtype(y.dtype):
756757
y = y.astype(np.object_)
@@ -901,7 +902,7 @@ def na_op(x, y):
901902
result = op(x, y)
902903
except TypeError:
903904
if isinstance(y, list):
904-
y = lib.list_to_object_array(y)
905+
y = construct_1d_array_from_listlike(y)
905906

906907
if isinstance(y, (np.ndarray, ABCSeries)):
907908
if (is_bool_dtype(x.dtype) and is_bool_dtype(y.dtype)):

pandas/tests/frame/test_constructors.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
MultiIndex, Timedelta, Timestamp,
2222
date_range, Categorical)
2323
import pandas as pd
24-
import pandas._libs.lib as lib
2524
import pandas.util.testing as tm
25+
from pandas.core.dtypes.cast import construct_1d_array_from_listlike
2626

2727
from pandas.tests.frame.common import TestData
2828

@@ -1199,7 +1199,7 @@ def test_constructor_from_items(self):
11991199
DataFrame.from_items(row_items, orient='index')
12001200

12011201
# orient='index', but thar be tuples
1202-
arr = lib.list_to_object_array(
1202+
arr = construct_1d_array_from_listlike(
12031203
[('bar', 'baz')] * len(self.mixed_frame))
12041204
self.mixed_frame['foo'] = arr
12051205
row_items = [(idx, list(self.mixed_frame.xs(idx)))

pandas/tests/indexes/test_multi.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from pandas.errors import PerformanceWarning, UnsortedIndexError
1919
from pandas.core.dtypes.dtypes import CategoricalDtype
2020
from pandas.core.indexes.base import InvalidIndexError
21-
from pandas._libs import lib
21+
from pandas.core.dtypes.cast import construct_1d_array_from_listlike
2222
from pandas._libs.lib import Timestamp
2323

2424
import pandas.util.testing as tm
@@ -913,7 +913,7 @@ def test_from_product_invalid_input(self):
913913
def test_from_product_datetimeindex(self):
914914
dt_index = date_range('2000-01-01', periods=2)
915915
mi = pd.MultiIndex.from_product([[1, 2], dt_index])
916-
etalon = lib.list_to_object_array([(1, pd.Timestamp(
916+
etalon = construct_1d_array_from_listlike([(1, pd.Timestamp(
917917
'2000-01-01')), (1, pd.Timestamp('2000-01-02')), (2, pd.Timestamp(
918918
'2000-01-01')), (2, pd.Timestamp('2000-01-02'))])
919919
tm.assert_numpy_array_equal(mi.values, etalon)
@@ -940,7 +940,7 @@ def test_values_boxed(self):
940940
(3, pd.Timestamp('2000-01-03'))]
941941
mi = pd.MultiIndex.from_tuples(tuples)
942942
tm.assert_numpy_array_equal(mi.values,
943-
lib.list_to_object_array(tuples))
943+
construct_1d_array_from_listlike(tuples))
944944
# Check that code branches for boxed values produce identical results
945945
tm.assert_numpy_array_equal(mi.values[:4], mi[:4].values)
946946

0 commit comments

Comments
 (0)