Skip to content

Commit b83784f

Browse files
committed
CLN/ENH: Add list versions of iterator methods.
py3compat now has lrange, lzip, lmap, lreduce and lfilter, which work like the python builtins and produce lists (to make it more clear where looking for iterators vs. containers).
1 parent 0802d1c commit b83784f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+735
-667
lines changed

bench/alignment.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Setup
2-
from pandas.util.py3compat import range
2+
from pandas.util.py3compat import range, lrange
33
import numpy as np
44
import pandas
55
import la
66
N = 1000
77
K = 50
88
arr1 = np.random.randn(N, K)
99
arr2 = np.random.randn(N, K)
10-
idx1 = list(range(N))
11-
idx2 = list(range(K))
10+
idx1 = lrange(N)
11+
idx2 = lrange(K)
1212

1313
# pandas
1414
dma1 = pandas.DataFrame(arr1, idx1, idx2)

bench/bench_merge.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
from pandas import *
22
from pandas.util.testing import rands
3-
from pandas.util.py3compat import range
3+
from pandas.util.py3compat import range, lrange
44
import random
55

66
N = 10000
77
ngroups = 10
88

99

1010
def get_test_data(ngroups=100, n=N):
11-
unique_groups = list(range(ngroups))
11+
unique_groups = lrange(ngroups)
1212
arr = np.asarray(np.tile(unique_groups, n / ngroups), dtype=object)
1313

1414
if len(arr) < n:
@@ -66,7 +66,7 @@ def get_test_data(ngroups=100, n=N):
6666

6767

6868
# R results
69-
from pandas.util.py3compat import StringIO
69+
from pandas.util.py3compat import StringIO, lrange
7070
# many to one
7171
r_results = read_table(StringIO(""" base::merge plyr data.table
7272
inner 0.2475 0.1183 0.1100
@@ -94,7 +94,7 @@ def get_test_data(ngroups=100, n=N):
9494

9595
# many to many
9696

97-
from pandas.util.py3compat import StringIO
97+
from pandas.util.py3compat import StringIO, lrange
9898
# many to one
9999
r_results = read_table(StringIO("""base::merge plyr data.table
100100
inner 0.4610 0.1276 0.1269

bench/bench_merge_sqlite.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import time
55
from pandas import DataFrame
66
from pandas.util.testing import rands
7-
from pandas.util.py3compat import range
8-
from six.moves import zip
7+
from pandas.util.py3compat import range, zip
98
import random
109

1110
N = 10000

bench/bench_take_indexing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from pandas import DataFrame
88
import timeit
9-
from six.moves import zip
9+
from pandas.util.py3compat import zip
1010

1111
setup = """
1212
from pandas import Series

bench/bench_unique.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pandas import *
33
from pandas.util.testing import rands
44
from pandas.util.py3compat import range
5-
from six.moves import zip
5+
from pandas.util.py3compat import zip
66
import pandas._tseries as lib
77
import numpy as np
88
import matplotlib.pyplot as plt

bench/better_unique.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import print_function
22
from pandas import DataFrame
33
from pandas.util.py3compat import range
4-
from six.moves import zip
4+
from pandas.util.py3compat import zip
55
import timeit
66

77
setup = """

bench/serialize.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from __future__ import print_function
2-
from pandas.util.py3compat import range
2+
from pandas.util.py3compat import range, lrange
33
import time
44
import os
55
import numpy as np
@@ -22,7 +22,7 @@ def roundtrip_archive(N, iterations=10):
2222
# Create data
2323
arr = np.random.randn(N, N)
2424
lar = la.larry(arr)
25-
dma = pandas.DataFrame(arr, list(range(N)), list(range(N)))
25+
dma = pandas.DataFrame(arr, lrange(N), lrange(N))
2626

2727
# filenames
2828
filename_numpy = '/Users/wesm/tmp/numpy.npz'

bench/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import itertools
44
import collections
55
import scipy.ndimage as ndi
6-
from six.moves import zip
6+
from pandas.util.py3compat import zip
77

88
N = 10000
99

doc/sphinxext/comment_eater.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from six.moves import cStringIO
1+
from pandas.util.py3compat import cStringIO
22
import compiler
33
import inspect
44
import textwrap

doc/sphinxext/compiler_unparse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"""
1313

1414
import sys
15-
from six.moves import cStringIO as StringIO
15+
from pandas.util.py3compat import cStringIO as StringIO
1616
from compiler.ast import Const, Name, Tuple, Div, Mul, Sub, Add
1717

1818
def unparse(ast, single_line_functions=False):

doc/sphinxext/ipython_directive.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
#-----------------------------------------------------------------------------
5959

6060
# Stdlib
61-
from pandas.util.py3compat import range
62-
from six.moves import map, cStringIO as StringIO
61+
from pandas.util.py3compat import range, lmap
62+
from pandas.util.py3compat import map, cStringIO as StringIO
6363
import ast
6464
import os
6565
import re
@@ -72,7 +72,7 @@
7272
from docutils import nodes
7373
from sphinx.util.compat import Directive
7474
import six
75-
from six.moves import zip
75+
from pandas.util.py3compat import zip
7676

7777
matplotlib.use('Agg')
7878

@@ -303,7 +303,7 @@ def process_input(self, data, input_prompt, lineno):
303303
def _remove_first_space_if_any(line):
304304
return line[1:] if line.startswith(' ') else line
305305

306-
input_lines = list(map(_remove_first_space_if_any, input.split('\n')))
306+
input_lines = lmap(_remove_first_space_if_any, input.split('\n'))
307307

308308
self.datacontent = data
309309

doc/sphinxext/plot_directive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@
7777

7878
from pandas.util.py3compat import range
7979
import sys, os, glob, shutil, imp, warnings, re, textwrap, traceback
80-
from six.moves import cStringIO as StringIO
80+
from pandas.util.py3compat import cStringIO as StringIO
8181
import sphinx
8282

8383
import warnings
84-
from six.moves import map
84+
from pandas.util.py3compat import map
8585
warnings.warn("A plot_directive module is also available under "
8686
"matplotlib.sphinxext; expect this numpydoc.plot_directive "
8787
"module to be deprecated after relevant features have been "

examples/finance.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44

55
from datetime import datetime
6+
from pandas.util.py3compat import zip
67

78
import matplotlib.finance as fin
89
import numpy as np
@@ -19,7 +20,7 @@
1920

2021
def getQuotes(symbol, start, end):
2122
quotes = fin.quotes_historical_yahoo(symbol, start, end)
22-
dates, open, close, high, low, volume = list(zip(*quotes))
23+
dates, open, close, high, low, volume = zip(*quotes)
2324

2425
data = {
2526
'open': open,

pandas/compat/scipy.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Shipping functions from SciPy to reduce dependency on having SciPy installed
33
"""
44

5-
from pandas.util.py3compat import range
5+
from pandas.util.py3compat import range, lrange
66
import numpy as np
77

88

@@ -224,9 +224,9 @@ def percentileofscore(a, score, kind='rank'):
224224
if kind == 'rank':
225225
if not(np.any(a == score)):
226226
a = np.append(a, score)
227-
a_len = np.array(list(range(len(a))))
227+
a_len = np.array(lrange(len(a)))
228228
else:
229-
a_len = np.array(list(range(len(a)))) + 1.0
229+
a_len = np.array(lrange(len(a))) + 1.0
230230

231231
a = np.sort(a)
232232
idx = [a == score]

pandas/core/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
from pandas.util import py3compat
1818
from pandas.util.py3compat import StringIO, BytesIO, range, long
19-
from six.moves import zip, map
19+
from pandas.util.py3compat import zip, map
2020
import six
2121

2222

pandas/core/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
from collections import namedtuple
5454
import warnings
5555
import six
56-
from six.moves import map
56+
from pandas.util.py3compat import map, lmap
5757

5858
DeprecatedOption = namedtuple('DeprecatedOption', 'key msg rkey removal_ver')
5959
RegisteredOption = namedtuple(
@@ -746,7 +746,7 @@ def is_one_of_factory(legal_values):
746746
def inner(x):
747747
from pandas.core.common import pprint_thing as pp
748748
if not x in legal_values:
749-
pp_values = list(map(pp, legal_values))
749+
pp_values = lmap(pp, legal_values)
750750
raise ValueError("Value must be one of %s" % pp("|".join(pp_values)))
751751

752752
return inner

pandas/core/format.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
from __future__ import print_function
22
# pylint: disable=W0141
33

4-
from pandas.util.py3compat import range
54
from pandas.util import compat
65
import sys
76
import six
8-
from six.moves import map, zip, reduce
97

10-
from pandas.util.py3compat import StringIO
8+
from pandas.util.py3compat import StringIO, lzip, range, map, zip, reduce
119
from pandas.core.common import adjoin, isnull, notnull
1210
from pandas.core.index import Index, MultiIndex, _ensure_index
1311
from pandas.util import py3compat
@@ -419,7 +417,7 @@ def is_numeric_dtype(dtype):
419417

420418
if isinstance(self.columns, MultiIndex):
421419
fmt_columns = self.columns.format(sparsify=False, adjoin=False)
422-
fmt_columns = list(zip(*fmt_columns))
420+
fmt_columns = lzip(*fmt_columns)
423421
dtypes = self.frame.dtypes.values
424422
need_leadsp = dict(zip(fmt_columns, map(is_numeric_dtype, dtypes)))
425423
str_columns = list(zip(*[[' ' + y
@@ -718,7 +716,7 @@ def _write_hierarchical_rows(self, fmt_values, indent):
718716

719717
idx_values = frame.index.format(sparsify=False, adjoin=False,
720718
names=False)
721-
idx_values = list(zip(*idx_values))
719+
idx_values = lzip(*idx_values)
722720

723721
if self.fmt.sparsify:
724722

pandas/core/frame.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
# pylint: disable=E1101,E1103
1313
# pylint: disable=W0212,W0231,W0703,W0622
1414

15-
from six.moves import zip
16-
from pandas.util.py3compat import StringIO
17-
from pandas.util.py3compat import range
15+
from pandas.util.py3compat import range, zip, lrange, lmap, lzip, StringIO
1816
from pandas.util import compat
1917
import operator
2018
import sys
@@ -59,7 +57,6 @@
5957

6058
from pandas.core.config import get_option, set_option
6159
import six
62-
from six.moves import map
6360

6461
#----------------------------------------------------------------------
6562
# Docstring templates
@@ -1151,7 +1148,7 @@ def to_records(self, index=True, convert_datetime64=True):
11511148
else:
11521149
if isinstance(self.index, MultiIndex):
11531150
# array of tuples to numpy cols. copy copy copy
1154-
ix_vals = list(map(np.array,zip(*self.index.values)))
1151+
ix_vals = lmap(np.array,zip(*self.index.values))
11551152
else:
11561153
ix_vals = [self.index.values]
11571154

@@ -1166,10 +1163,10 @@ def to_records(self, index=True, convert_datetime64=True):
11661163
count += 1
11671164
elif index_names[0] is None:
11681165
index_names = ['index']
1169-
names = index_names + list(map(str, self.columns))
1166+
names = index_names + lmap(str, self.columns)
11701167
else:
11711168
arrays = [self[c].values for c in self.columns]
1172-
names = list(map(str, self.columns))
1169+
names = lmap(str, self.columns)
11731170

11741171
dtype = np.dtype([(x, v.dtype) for x, v in zip(names, arrays)])
11751172
return np.rec.fromarrays(arrays, dtype=dtype, names=names)
@@ -1197,7 +1194,7 @@ def from_items(cls, items, columns=None, orient='columns'):
11971194
-------
11981195
frame : DataFrame
11991196
"""
1200-
keys, values = list(zip(*items))
1197+
keys, values = lzip(*items)
12011198

12021199
if orient == 'columns':
12031200
if columns is not None:
@@ -2911,7 +2908,7 @@ def _maybe_cast(values, labels=None):
29112908

29122909
if not drop:
29132910
names = self.index.names
2914-
zipped = list(zip(self.index.levels, self.index.labels))
2911+
zipped = lzip(self.index.levels, self.index.labels)
29152912

29162913
multi_col = isinstance(self.columns, MultiIndex)
29172914
for i, (lev, lab) in reversed(list(enumerate(zipped))):
@@ -4536,7 +4533,7 @@ def _apply_broadcast(self, func, axis):
45364533
def applymap(self, func):
45374534
"""
45384535
Apply a function to a DataFrame that is intended to operate
4539-
elementwise, i.e. like doing list(map(func, series)) for each series in the
4536+
elementwise, i.e. like doing map(func, series) for each series in the
45404537
DataFrame
45414538
45424539
Parameters
@@ -4889,7 +4886,7 @@ def pretty_name(x):
48894886
series.min(), series.quantile(lb), series.median(),
48904887
series.quantile(ub), series.max()])
48914888

4892-
return self._constructor(list(map(list, zip(*destat))), index=destat_columns,
4889+
return self._constructor(lmap(list, zip(*destat)), index=destat_columns,
48934890
columns=numdata.columns)
48944891

48954892
#----------------------------------------------------------------------
@@ -5850,7 +5847,7 @@ def _to_arrays(data, columns, coerce_float=False, dtype=None):
58505847
return arrays, columns
58515848
else:
58525849
# last ditch effort
5853-
data = list(map(tuple, data))
5850+
data = lmap(tuple, data)
58545851
return _list_to_arrays(data, columns,
58555852
coerce_float=coerce_float,
58565853
dtype=dtype)
@@ -5924,7 +5921,7 @@ def _convert_object_array(content, columns, coerce_float=False, dtype=None):
59245921

59255922

59265923
def _get_names_from_index(data):
5927-
index = list(range(len(data)))
5924+
index = lrange(len(data))
59285925
has_some_name = any([s.name is not None for s in data])
59295926
if not has_some_name:
59305927
return index

pandas/core/generic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from pandas.tseries.index import DatetimeIndex
1212
import pandas.core.common as com
1313
import six
14-
from six.moves import map, zip
14+
from pandas.util.py3compat import map, zip
1515

1616

1717
class PandasError(Exception):

0 commit comments

Comments
 (0)