Skip to content

Commit bacd6cf

Browse files
committed
CLN;: remove compat.lzip
1 parent 64c1127 commit bacd6cf

31 files changed

+81
-116
lines changed

pandas/compat/__init__.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
Cross-compatible functions for different versions of Python.
66
77
Key items to import for compatible code:
8-
* lists: lrange(), lmap(), lzip()
8+
* lists: lrange(), lmap()
99
1010
Other items:
1111
* platform checker
@@ -24,10 +24,6 @@ def lrange(*args, **kwargs):
2424
return list(range(*args, **kwargs))
2525

2626

27-
def lzip(*args, **kwargs):
28-
return list(zip(*args, **kwargs))
29-
30-
3127
def lmap(*args, **kwargs):
3228
return list(map(*args, **kwargs))
3329

pandas/core/arrays/categorical.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from pandas._config import get_option
88

99
from pandas._libs import algos as libalgos, lib
10-
from pandas.compat import lzip
1110
from pandas.compat.numpy import function as nv
1211
from pandas.util._decorators import (
1312
Appender, Substitution, cache_readonly, deprecate_kwarg)
@@ -2692,4 +2691,4 @@ def _factorize_from_iterables(iterables):
26922691
if len(iterables) == 0:
26932692
# For consistency, it should return a list of 2 lists.
26942693
return [[], []]
2695-
return map(list, lzip(*[_factorize_from_iterable(it) for it in iterables]))
2694+
return map(list, zip(*[_factorize_from_iterable(it) for it in iterables]))

pandas/core/frame.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from pandas.util._validators import (validate_bool_kwarg,
3232
validate_axis_style_args)
3333

34-
from pandas.compat import PY36, lmap, lzip, raise_with_traceback
34+
from pandas.compat import PY36, lmap, raise_with_traceback
3535
from pandas.compat.numpy import function as nv
3636
from pandas.core.dtypes.cast import (
3737
maybe_upcast,
@@ -1754,7 +1754,7 @@ def from_items(cls, items, columns=None, orient='columns'):
17541754
"preserve the key order.",
17551755
FutureWarning, stacklevel=2)
17561756

1757-
keys, values = lzip(*items)
1757+
keys, values = zip(*items)
17581758

17591759
if orient == 'columns':
17601760
if columns is not None:
@@ -4447,7 +4447,7 @@ def _maybe_casted_values(index, labels=None):
44474447
if isinstance(self.index, MultiIndex):
44484448
names = [n if n is not None else ('level_%d' % i)
44494449
for (i, n) in enumerate(self.index.names)]
4450-
to_insert = lzip(self.index.levels, self.index.codes)
4450+
to_insert = zip(self.index.levels, self.index.codes)
44514451
else:
44524452
default = 'index' if 'index' not in self else 'level_0'
44534453
names = ([default] if self.index.name is None

pandas/core/generic.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from pandas._config import config
1616

1717
from pandas._libs import Timestamp, iNaT, properties
18-
from pandas.compat import lzip, set_function_name, to_str
18+
from pandas.compat import set_function_name, to_str
1919
from pandas.compat.numpy import function as nv
2020
from pandas.errors import AbstractMethodError
2121
from pandas.util._decorators import (
@@ -6505,7 +6505,7 @@ def replace(self, to_replace=None, value=None, inplace=False, limit=None,
65056505
regex = True
65066506

65076507
items = list(to_replace.items())
6508-
keys, values = lzip(*items) or ([], [])
6508+
keys, values = zip(*items) if len(items) else ([], [])
65096509

65106510
are_mappings = [is_dict_like(v) for v in values]
65116511

@@ -6519,7 +6519,7 @@ def replace(self, to_replace=None, value=None, inplace=False, limit=None,
65196519
value_dict = {}
65206520

65216521
for k, v in items:
6522-
keys, values = lzip(*v.items()) or ([], [])
6522+
keys, values = list(zip(*v.items())) or ([], [])
65236523
if set(keys) & set(values):
65246524
raise ValueError("Replacement not allowed with "
65256525
"overlapping keys and values")

pandas/core/groupby/generic.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import numpy as np
1616

1717
from pandas._libs import Timestamp, lib
18-
from pandas.compat import lzip
1918
from pandas.errors import AbstractMethodError
2019
from pandas.util._decorators import Appender, Substitution
2120

@@ -781,13 +780,13 @@ def _aggregate_multiple_funcs(self, arg, _level):
781780
FutureWarning, stacklevel=3)
782781

783782
columns = list(arg.keys())
784-
arg = list(arg.items())
783+
arg = arg.items()
785784
elif any(isinstance(x, (tuple, list)) for x in arg):
786785
arg = [(x, x) if not isinstance(x, (tuple, list)) else x
787786
for x in arg]
788787

789788
# indicated column order
790-
columns = lzip(*arg)[0]
789+
columns = next(zip(*arg))
791790
else:
792791
# list of functions / function names
793792
columns = []
@@ -797,7 +796,7 @@ def _aggregate_multiple_funcs(self, arg, _level):
797796
else:
798797
# protect against callables without names
799798
columns.append(com.get_callable_name(f))
800-
arg = lzip(columns, arg)
799+
arg = zip(columns, arg)
801800

802801
results = OrderedDict()
803802
for name, func in arg:

pandas/core/groupby/ops.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from pandas._libs import NaT, iNaT, lib
1414
import pandas._libs.groupby as libgroupby
1515
import pandas._libs.reduction as reduction
16-
from pandas.compat import lzip
1716
from pandas.errors import AbstractMethodError
1817
from pandas.util._decorators import cache_readonly
1918

@@ -259,7 +258,7 @@ def groups(self):
259258
if len(self.groupings) == 1:
260259
return self.groupings[0].groups
261260
else:
262-
to_groupby = lzip(*(ping.grouper for ping in self.groupings))
261+
to_groupby = zip(*(ping.grouper for ping in self.groupings))
263262
to_groupby = Index(to_groupby)
264263
return self.axis.groupby(to_groupby)
265264

pandas/core/indexes/multi.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
from pandas._libs import (
1111
Timestamp, algos as libalgos, index as libindex, lib, tslibs)
12-
from pandas.compat import lzip
1312
from pandas.compat.numpy import function as nv
1413
from pandas.errors import PerformanceWarning, UnsortedIndexError
1514
from pandas.util._decorators import Appender, cache_readonly, deprecate_kwarg
@@ -402,7 +401,7 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
402401
elif isinstance(tuples, list):
403402
arrays = list(lib.to_object_array_tuples(tuples).T)
404403
else:
405-
arrays = lzip(*tuples)
404+
arrays = zip(*tuples)
406405

407406
return MultiIndex.from_arrays(arrays, sortorder=sortorder, names=names)
408407

@@ -511,7 +510,7 @@ def from_frame(cls, df, sortorder=None, names=None):
511510
if not isinstance(df, ABCDataFrame):
512511
raise TypeError("Input must be a DataFrame")
513512

514-
column_names, columns = lzip(*df.iteritems())
513+
column_names, columns = zip(*df.iteritems())
515514
names = column_names if names is None else names
516515
return cls.from_arrays(columns, sortorder=sortorder, names=names)
517516

@@ -2933,7 +2932,7 @@ def union(self, other, sort=None):
29332932
other._ndarray_values],
29342933
sort=sort)
29352934

2936-
return MultiIndex.from_arrays(lzip(*uniq_tuples), sortorder=0,
2935+
return MultiIndex.from_arrays(zip(*uniq_tuples), sortorder=0,
29372936
names=result_names)
29382937

29392938
def intersection(self, other, sort=False):
@@ -2976,7 +2975,7 @@ def intersection(self, other, sort=False):
29762975
codes=[[]] * self.nlevels,
29772976
names=result_names, verify_integrity=False)
29782977
else:
2979-
return MultiIndex.from_arrays(lzip(*uniq_tuples), sortorder=0,
2978+
return MultiIndex.from_arrays(zip(*uniq_tuples), sortorder=0,
29802979
names=result_names)
29812980

29822981
def difference(self, other, sort=None):
@@ -3144,7 +3143,7 @@ def isin(self, values, level=None):
31443143

31453144

31463145
def _sparsify(label_list, start=0, sentinel=''):
3147-
pivoted = lzip(*label_list)
3146+
pivoted = list(zip(*label_list))
31483147
k = len(label_list)
31493148

31503149
result = pivoted[:start + 1]
@@ -3168,7 +3167,7 @@ def _sparsify(label_list, start=0, sentinel=''):
31683167

31693168
prev = cur
31703169

3171-
return lzip(*result)
3170+
return list(zip(*result))
31723171

31733172

31743173
def _get_na_rep(dtype):

pandas/core/reshape/concat.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import pandas.core.dtypes.concat as _concat
88

9-
from pandas import DataFrame, Index, MultiIndex, Series, compat
9+
from pandas import DataFrame, Index, MultiIndex, Series
1010
from pandas.core import common as com
1111
from pandas.core.arrays.categorical import (
1212
_factorize_from_iterable, _factorize_from_iterables)
@@ -536,7 +536,7 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None):
536536

537537
if ((levels is None and isinstance(keys[0], tuple)) or
538538
(levels is not None and len(levels) > 1)):
539-
zipped = compat.lzip(*keys)
539+
zipped = list(zip(*keys))
540540
if names is None:
541541
names = [None] * len(zipped)
542542

pandas/core/reshape/merge.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import numpy as np
1010

1111
from pandas._libs import hashtable as libhashtable, join as libjoin, lib
12-
from pandas.compat import lzip
1312
from pandas.errors import MergeError
1413
from pandas.util._decorators import Appender, Substitution
1514

@@ -1512,7 +1511,7 @@ def flip(xs):
15121511
labels = list(string.ascii_lowercase[:len(xs)])
15131512
dtypes = [x.dtype for x in xs]
15141513
labeled_dtypes = list(zip(labels, dtypes))
1515-
return np.array(lzip(*xs), labeled_dtypes)
1514+
return np.array(list(zip(*xs)), labeled_dtypes)
15161515

15171516
# values to compare
15181517
left_values = (self.left.index.values if self.left_index else

pandas/io/formats/format.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from pandas._libs import lib
1616
from pandas._libs.tslib import format_array_from_datetime
1717
from pandas._libs.tslibs import NaT, Timedelta, Timestamp, iNaT
18-
from pandas.compat import lzip
1918

2019
from pandas.core.dtypes.common import (
2120
is_categorical_dtype, is_complex_dtype, is_datetime64_dtype,
@@ -753,7 +752,7 @@ def _get_formatted_column_labels(self, frame):
753752

754753
if isinstance(columns, ABCMultiIndex):
755754
fmt_columns = columns.format(sparsify=False, adjoin=False)
756-
fmt_columns = lzip(*fmt_columns)
755+
fmt_columns = list(zip(*fmt_columns))
757756
dtypes = self.frame.dtypes._values
758757

759758
# if we have a Float level, they don't use leading space at all

pandas/io/formats/html.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
from pandas._config import get_option
99

10-
from pandas.compat import lzip
11-
1210
from pandas.core.dtypes.generic import ABCMultiIndex
1311

1412
from pandas import option_context
@@ -414,7 +412,7 @@ def _write_hierarchical_rows(self, fmt_values, indent):
414412

415413
idx_values = frame.index.format(sparsify=False, adjoin=False,
416414
names=False)
417-
idx_values = lzip(*idx_values)
415+
idx_values = list(zip(*idx_values))
418416

419417
if self.fmt.sparsify:
420418
# GH3547

pandas/io/parsers.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import pandas._libs.parsers as parsers
1919
from pandas._libs.tslibs import parsing
2020
import pandas.compat as compat
21-
from pandas.compat import lzip
2221
from pandas.errors import (
2322
AbstractMethodError, EmptyDataError, ParserError, ParserWarning)
2423
from pandas.util._decorators import Appender
@@ -1478,7 +1477,7 @@ def _extract_multi_indexer_columns(self, header, index_names, col_names,
14781477
def extract(r):
14791478
return tuple(r[i] for i in range(field_count) if i not in sic)
14801479

1481-
columns = lzip(*[extract(r) for r in header])
1480+
columns = list(zip(*[extract(r) for r in header]))
14821481
names = ic + columns
14831482

14841483
# If we find unnamed columns all in a single

pandas/io/stata.py

+11-12
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
from pandas._libs.lib import infer_dtype
2525
from pandas._libs.writers import max_len_string_array
26-
from pandas.compat import lmap, lzip
26+
from pandas.compat import lmap
2727
from pandas.util._decorators import Appender, deprecate_kwarg
2828

2929
from pandas.core.dtypes.common import (
@@ -852,17 +852,16 @@ def __init__(self):
852852
# NOTE: the byte type seems to be reserved for categorical variables
853853
# with a label, but the underlying variable is -127 to 100
854854
# we're going to drop the label and cast to int
855-
self.DTYPE_MAP = \
856-
dict(
857-
lzip(range(1, 245), ['a' + str(i) for i in range(1, 245)]) +
858-
[
859-
(251, np.int8),
860-
(252, np.int16),
861-
(253, np.int32),
862-
(254, np.float32),
863-
(255, np.float64)
864-
]
865-
)
855+
self.DTYPE_MAP = dict(
856+
list(zip(range(1, 245), ['a' + str(i) for i in range(1, 245)])) +
857+
[
858+
(251, np.int8),
859+
(252, np.int16),
860+
(253, np.int32),
861+
(254, np.float32),
862+
(255, np.float64)
863+
]
864+
)
866865
self.DTYPE_MAP_XML = \
867866
dict(
868867
[

pandas/tests/frame/test_axis_select_reindex.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import numpy as np
44
import pytest
55

6-
from pandas.compat import lrange, lzip
6+
from pandas.compat import lrange
77
from pandas.errors import PerformanceWarning
88

99
import pandas as pd
@@ -100,7 +100,7 @@ def test_drop(self):
100100
simple[['B']])
101101

102102
# non-unique - wheee!
103-
nu_df = DataFrame(lzip(range(3), range(-3, 1), list('abc')),
103+
nu_df = DataFrame(list(zip(range(3), range(-3, 1), list('abc'))),
104104
columns=['a', 'a', 'b'])
105105
assert_frame_equal(nu_df.drop('a', axis=1), nu_df[['b']])
106106
assert_frame_equal(nu_df.drop('b', axis='columns'), nu_df['a'])

pandas/tests/frame/test_constructors.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import numpy.ma as ma
88
import pytest
99

10-
from pandas.compat import PY36, is_platform_little_endian, lmap, lrange, lzip
10+
from pandas.compat import PY36, is_platform_little_endian, lmap, lrange
1111

1212
from pandas.core.dtypes.cast import construct_1d_object_array_from_listlike
1313
from pandas.core.dtypes.common import is_integer_dtype
@@ -132,12 +132,11 @@ def _make_mixed_dtypes_df(typ, ad=None):
132132
arrays = [np.array(np.random.randint(
133133
10, size=10), dtype=d) for d in dtypes]
134134

135-
zipper = lzip(dtypes, arrays)
136-
for d, a in zipper:
135+
for d, a in zip(dtypes, arrays):
137136
assert(a.dtype == d)
138137
if ad is None:
139138
ad = dict()
140-
ad.update({d: a for d, a in zipper})
139+
ad.update({d: a for d, a in zip(dtypes, arrays)})
141140
return DataFrame(ad)
142141

143142
def _check_mixed_dtypes(df, dtypes=None):

pandas/tests/frame/test_indexing.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66

77
from pandas._libs.tslib import iNaT
8-
from pandas.compat import lrange, lzip
8+
from pandas.compat import lrange
99

1010
from pandas.core.dtypes.common import is_float_dtype, is_integer, is_scalar
1111
from pandas.core.dtypes.dtypes import CategoricalDtype
@@ -178,7 +178,7 @@ def test_setitem_list_not_dataframe(self):
178178
assert_almost_equal(self.frame[['A', 'B']].values, data)
179179

180180
def test_setitem_list_of_tuples(self):
181-
tuples = lzip(self.frame['A'], self.frame['B'])
181+
tuples = list(zip(self.frame['A'], self.frame['B']))
182182
self.frame['tuples'] = tuples
183183

184184
result = self.frame['tuples']
@@ -998,11 +998,11 @@ def test_setitem_fancy_2d(self):
998998
assert_frame_equal(frame, expected)
999999

10001000
# new corner case of boolean slicing / setting
1001-
frame = DataFrame(lzip([2, 3, 9, 6, 7], [np.nan] * 5),
1001+
frame = DataFrame(zip([2, 3, 9, 6, 7], [np.nan] * 5),
10021002
columns=['a', 'b'])
10031003
lst = [100]
10041004
lst.extend([np.nan] * 4)
1005-
expected = DataFrame(lzip([100, 3, 9, 6, 7], lst),
1005+
expected = DataFrame(zip([100, 3, 9, 6, 7], lst),
10061006
columns=['a', 'b'])
10071007
frame[frame['a'] == 2] = 100
10081008
assert_frame_equal(frame, expected)

0 commit comments

Comments
 (0)