Skip to content

Commit 0ed46a0

Browse files
committed
Merge pull request #10719 from jreback/irow
DEPR: deprecate irow,icol,iget_value,iget in Series/DataFrame, #10711
2 parents 3bc19e5 + b69bde6 commit 0ed46a0

20 files changed

+196
-113
lines changed

doc/source/api.rst

-1
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,6 @@ application to columns of a specific data type.
15581558
DataFrameGroupBy.hist
15591559
DataFrameGroupBy.idxmax
15601560
DataFrameGroupBy.idxmin
1561-
DataFrameGroupBy.irow
15621561
DataFrameGroupBy.mad
15631562
DataFrameGroupBy.pct_change
15641563
DataFrameGroupBy.plot

doc/source/indexing.rst

-18
Original file line numberDiff line numberDiff line change
@@ -121,18 +121,6 @@ the specification are assumed to be ``:``. (e.g. ``p.loc['a']`` is equiv to
121121
DataFrame; ``df.loc[row_indexer,column_indexer]``
122122
Panel; ``p.loc[item_indexer,major_indexer,minor_indexer]``
123123

124-
Deprecations
125-
------------
126-
127-
Beginning with version 0.11.0, it's recommended that you transition away from
128-
the following methods as they *may* be deprecated in future versions.
129-
130-
- ``irow``
131-
- ``icol``
132-
- ``iget_value``
133-
134-
See the section :ref:`Selection by Position <indexing.integer>` for substitutes.
135-
136124
.. _indexing.basics:
137125

138126
Basics
@@ -432,20 +420,14 @@ Select via integer list
432420
433421
df1.iloc[[1,3,5],[1,3]]
434422
435-
For slicing rows explicitly (equiv to deprecated ``df.irow(slice(1,3))``).
436-
437423
.. ipython:: python
438424
439425
df1.iloc[1:3,:]
440426
441-
For slicing columns explicitly (equiv to deprecated ``df.icol(slice(1,3))``).
442-
443427
.. ipython:: python
444428
445429
df1.iloc[:,1:3]
446430
447-
For getting a scalar via integer position (equiv to deprecated ``df.get_value(1,1)``)
448-
449431
.. ipython:: python
450432
451433
# this is also equivalent to ``df1.iat[1,1]``

doc/source/whatsnew/v0.17.0.txt

+20
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,26 @@ Other API Changes
434434
Deprecations
435435
^^^^^^^^^^^^
436436

437+
.. note:: These indexing function have been deprecated in the documentation since 0.11.0.
438+
439+
- For ``Series`` the following indexing functions are deprecated (:issue:`10177`).
440+
===================== ==============================================================
441+
Deprecated Function Replacement
442+
===================== ==============================================================
443+
``.irow(i)`` ``.iloc[i]`` or ``.iat[i]``
444+
``.iget(i)`` ``.iloc[i]`` or ``.iat[i]``
445+
``.iget_value(i)`` ``.iloc[i]`` or ``.iat[i]``
446+
===================== ==============================================================
447+
448+
- For ``DataFrame`` the following indexing functions are deprecated (:issue:`10177`).
449+
===================== ==============================================================
450+
Deprecated Function Replacement
451+
===================== ==============================================================
452+
``.irow(i)`` ``.iloc[i]``
453+
``.iget_value(i, j)`` ``.iloc[i, j]`` or ``.iat[i, j]``
454+
``.icol(j)`` ``.iloc[:, j]``
455+
===================== ==============================================================
456+
437457
.. _whatsnew_0170.prior_deprecations:
438458

439459
Removal of prior version deprecations/changes

pandas/core/frame.py

+20-4
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ def iteritems(self):
552552
yield k, self._get_item_cache(k)
553553
else:
554554
for i, k in enumerate(self.columns):
555-
yield k, self.icol(i)
555+
yield k, self._ixs(i,axis=1)
556556

557557
def iterrows(self):
558558
"""
@@ -1697,9 +1697,20 @@ def set_value(self, index, col, value, takeable=False):
16971697
return self
16981698

16991699
def irow(self, i, copy=False):
1700+
"""
1701+
DEPRECATED. Use ``.iloc[i]`` instead
1702+
"""
1703+
1704+
warnings.warn("irow(i) is deprecated. Please use .iloc[i]",
1705+
FutureWarning, stacklevel=2)
17001706
return self._ixs(i, axis=0)
17011707

17021708
def icol(self, i):
1709+
"""
1710+
DEPRECATED. Use ``.iloc[:, i]`` instead
1711+
"""
1712+
warnings.warn("icol(i) is deprecated. Please use .iloc[:,i]",
1713+
FutureWarning, stacklevel=2)
17031714
return self._ixs(i, axis=1)
17041715

17051716
def _ixs(self, i, axis=0):
@@ -1773,6 +1784,11 @@ def _ixs(self, i, axis=0):
17731784
return result
17741785

17751786
def iget_value(self, i, j):
1787+
"""
1788+
DEPRECATED. Use ``.iat[i, j]`` instead
1789+
"""
1790+
warnings.warn("iget_value(i, j) is deprecated. Please use .iat[i, j]",
1791+
FutureWarning, stacklevel=2)
17761792
return self.iat[i, j]
17771793

17781794
def __getitem__(self, key):
@@ -3769,7 +3785,7 @@ def _apply_standard(self, func, axis, ignore_failures=False, reduce=True):
37693785

37703786
dtype = object if self._is_mixed_type else None
37713787
if axis == 0:
3772-
series_gen = (self.icol(i) for i in range(len(self.columns)))
3788+
series_gen = (self._ixs(i,axis=1) for i in range(len(self.columns)))
37733789
res_index = self.columns
37743790
res_columns = self.index
37753791
elif axis == 1:
@@ -4900,11 +4916,11 @@ def _to_arrays(data, columns, coerce_float=False, dtype=None):
49004916
"""
49014917
if isinstance(data, DataFrame):
49024918
if columns is not None:
4903-
arrays = [data.icol(i).values for i, col in enumerate(data.columns)
4919+
arrays = [data._ixs(i,axis=1).values for i, col in enumerate(data.columns)
49044920
if col in columns]
49054921
else:
49064922
columns = data.columns
4907-
arrays = [data.icol(i).values for i in range(len(columns))]
4923+
arrays = [data._ixs(i,axis=1).values for i in range(len(columns))]
49084924

49094925
return arrays, columns
49104926

pandas/core/groupby.py

+16-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import numpy as np
44
import datetime
55
import collections
6+
import warnings
67

78
from pandas.compat import(
89
zip, builtins, range, long, lzip,
@@ -71,7 +72,7 @@
7172
'fillna',
7273
'mad',
7374
'any', 'all',
74-
'irow', 'take',
75+
'take',
7576
'idxmax', 'idxmin',
7677
'shift', 'tshift',
7778
'ffill', 'bfill',
@@ -170,7 +171,7 @@ class Grouper(object):
170171
freq : string / frequency object, defaults to None
171172
This will groupby the specified frequency if the target selection (via key or level) is
172173
a datetime-like object. For full specification of available frequencies, please see
173-
`here <http://pandas.pydata.org/pandas-docs/stable/timeseries.html>`_.
174+
`here <http://pandas.pydata.org/pandas-docs/stable/timeseries.html>`_.
174175
axis : number/name of the axis, defaults to 0
175176
sort : boolean, default to False
176177
whether to sort the resulting labels
@@ -188,7 +189,7 @@ class Grouper(object):
188189
189190
Examples
190191
--------
191-
192+
192193
Syntactic sugar for ``df.groupby('A')``
193194
194195
>>> df.groupby(Grouper(key='A'))
@@ -198,9 +199,9 @@ class Grouper(object):
198199
>>> df.groupby(Grouper(key='date', freq='60s'))
199200
200201
Specify a resample operation on the level 'date' on the columns axis
201-
with a frequency of 60s
202+
with a frequency of 60s
202203
203-
>>> df.groupby(Grouper(level='date', freq='60s', axis=1))
204+
>>> df.groupby(Grouper(level='date', freq='60s', axis=1))
204205
"""
205206

206207
def __new__(cls, *args, **kwargs):
@@ -711,6 +712,16 @@ def _iterate_slices(self):
711712
def transform(self, func, *args, **kwargs):
712713
raise AbstractMethodError(self)
713714

715+
def irow(self, i):
716+
"""
717+
DEPRECATED. Use ``.nth(i)`` instead
718+
"""
719+
720+
# 10177
721+
warnings.warn("irow(i) is deprecated. Please use .nth(i)",
722+
FutureWarning, stacklevel=2)
723+
return self.nth(i)
724+
714725
def mean(self):
715726
"""
716727
Compute mean of groups, excluding missing values

pandas/core/series.py

+25-4
Original file line numberDiff line numberDiff line change
@@ -781,9 +781,30 @@ def reshape(self, *args, **kwargs):
781781

782782
return self.values.reshape(shape, **kwargs)
783783

784-
iget_value = _ixs
785-
iget = _ixs
786-
irow = _ixs
784+
def iget_value(self, i, axis=0):
785+
"""
786+
DEPRECATED. Use ``.iloc[i]`` or ``.iat[i]`` instead
787+
"""
788+
warnings.warn("iget_value(i) is deprecated. Please use .iloc[i] or .iat[i]",
789+
FutureWarning, stacklevel=2)
790+
return self._ixs(i)
791+
792+
def iget(self, i, axis=0):
793+
"""
794+
DEPRECATED. Use ``.iloc[i]`` or ``.iat[i]`` instead
795+
"""
796+
797+
warnings.warn("iget(i) is deprecated. Please use .iloc[i] or .iat[i]",
798+
FutureWarning, stacklevel=2)
799+
return self._ixs(i)
800+
801+
def irow(self, i, axis=0):
802+
"""
803+
DEPRECATED. Use ``.iloc[i]`` or ``.iat[i]`` instead
804+
"""
805+
warnings.warn("irow(i) is deprecated. Please use .iloc[i] or iat[i]",
806+
FutureWarning, stacklevel=2)
807+
return self._ixs(i)
787808

788809
def get_value(self, label, takeable=False):
789810
"""
@@ -2323,7 +2344,7 @@ def from_csv(cls, path, sep=',', parse_dates=True, header=None,
23232344
sep=sep, parse_dates=parse_dates,
23242345
encoding=encoding,
23252346
infer_datetime_format=infer_datetime_format)
2326-
result = df.icol(0)
2347+
result = df.iloc[:,0]
23272348
if header is None:
23282349
result.index.name = result.name = None
23292350

pandas/sparse/tests/test_sparse.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1240,16 +1240,18 @@ def test_getitem(self):
12401240
self.assertRaises(Exception, sdf.__getitem__, ['a', 'd'])
12411241

12421242
def test_icol(self):
1243+
# 10711 deprecated
1244+
12431245
# 2227
1244-
result = self.frame.icol(0)
1246+
result = self.frame.iloc[:, 0]
12451247
self.assertTrue(isinstance(result, SparseSeries))
12461248
assert_sp_series_equal(result, self.frame['A'])
12471249

12481250
# preserve sparse index type. #2251
12491251
data = {'A': [0, 1]}
12501252
iframe = SparseDataFrame(data, default_kind='integer')
12511253
self.assertEqual(type(iframe['A'].sp_index),
1252-
type(iframe.icol(0).sp_index))
1254+
type(iframe.iloc[:, 0].sp_index))
12531255

12541256
def test_set_value(self):
12551257

pandas/tests/test_categorical.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -2203,27 +2203,27 @@ def test_slicing_and_getting_ops(self):
22032203
self.assertEqual(res_val, exp_val)
22042204

22052205
# i : int, slice, or sequence of integers
2206-
res_row = df.irow(2)
2206+
res_row = df.iloc[2]
22072207
tm.assert_series_equal(res_row, exp_row)
22082208
tm.assertIsInstance(res_row["cats"], compat.string_types)
22092209

2210-
res_df = df.irow(slice(2,4))
2210+
res_df = df.iloc[slice(2,4)]
22112211
tm.assert_frame_equal(res_df, exp_df)
22122212
self.assertTrue(com.is_categorical_dtype(res_df["cats"]))
22132213

2214-
res_df = df.irow([2,3])
2214+
res_df = df.iloc[[2,3]]
22152215
tm.assert_frame_equal(res_df, exp_df)
22162216
self.assertTrue(com.is_categorical_dtype(res_df["cats"]))
22172217

2218-
res_col = df.icol(0)
2218+
res_col = df.iloc[:,0]
22192219
tm.assert_series_equal(res_col, exp_col)
22202220
self.assertTrue(com.is_categorical_dtype(res_col))
22212221

2222-
res_df = df.icol(slice(0,2))
2222+
res_df = df.iloc[:,slice(0,2)]
22232223
tm.assert_frame_equal(res_df, df)
22242224
self.assertTrue(com.is_categorical_dtype(res_df["cats"]))
22252225

2226-
res_df = df.icol([0,1])
2226+
res_df = df.iloc[:,[0,1]]
22272227
tm.assert_frame_equal(res_df, df)
22282228
self.assertTrue(com.is_categorical_dtype(res_df["cats"]))
22292229

pandas/tests/test_expressions.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def run_arithmetic_test(self, df, other, assert_func, check_dtype=False,
9797
def test_integer_arithmetic(self):
9898
self.run_arithmetic_test(self.integer, self.integer,
9999
assert_frame_equal)
100-
self.run_arithmetic_test(self.integer.icol(0), self.integer.icol(0),
100+
self.run_arithmetic_test(self.integer.iloc[:,0], self.integer.iloc[:, 0],
101101
assert_series_equal, check_dtype=True)
102102

103103
@nose.tools.nottest
@@ -182,7 +182,7 @@ def test_integer_arithmetic_frame(self):
182182
self.run_frame(self.integer, self.integer)
183183

184184
def test_integer_arithmetic_series(self):
185-
self.run_series(self.integer.icol(0), self.integer.icol(0))
185+
self.run_series(self.integer.iloc[:, 0], self.integer.iloc[:, 0])
186186

187187
@slow
188188
def test_integer_panel(self):
@@ -192,7 +192,7 @@ def test_float_arithemtic_frame(self):
192192
self.run_frame(self.frame2, self.frame2)
193193

194194
def test_float_arithmetic_series(self):
195-
self.run_series(self.frame2.icol(0), self.frame2.icol(0))
195+
self.run_series(self.frame2.iloc[:, 0], self.frame2.iloc[:, 0])
196196

197197
@slow
198198
def test_float_panel(self):
@@ -220,7 +220,7 @@ def test_mixed_panel(self):
220220

221221
def test_float_arithemtic(self):
222222
self.run_arithmetic_test(self.frame, self.frame, assert_frame_equal)
223-
self.run_arithmetic_test(self.frame.icol(0), self.frame.icol(0),
223+
self.run_arithmetic_test(self.frame.iloc[:, 0], self.frame.iloc[:, 0],
224224
assert_series_equal, check_dtype=True)
225225

226226
def test_mixed_arithmetic(self):
@@ -232,7 +232,7 @@ def test_mixed_arithmetic(self):
232232
def test_integer_with_zeros(self):
233233
self.integer *= np.random.randint(0, 2, size=np.shape(self.integer))
234234
self.run_arithmetic_test(self.integer, self.integer, assert_frame_equal)
235-
self.run_arithmetic_test(self.integer.icol(0), self.integer.icol(0),
235+
self.run_arithmetic_test(self.integer.iloc[:, 0], self.integer.iloc[:, 0],
236236
assert_series_equal)
237237

238238
def test_invalid(self):

0 commit comments

Comments
 (0)