Skip to content

Commit 4d7d921

Browse files
authored
DEPR: lookup, append (#49481)
* DEPR: lookup, append * update docs, fix tests * rm test_append files * update tests * fix doc * remove asvs
1 parent d13c9e0 commit 4d7d921

File tree

14 files changed

+6
-983
lines changed

14 files changed

+6
-983
lines changed

asv_bench/benchmarks/frame_methods.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,6 @@ def time_frame_get_numeric_data(self):
2828
self.df._get_numeric_data()
2929

3030

31-
class Lookup:
32-
def setup(self):
33-
self.df = DataFrame(np.random.randn(10000, 8), columns=list("abcdefgh"))
34-
self.df["foo"] = "bar"
35-
self.row_labels = list(self.df.index[::10])[:900]
36-
self.col_labels = list(self.df.columns) * 100
37-
self.row_labels_all = np.array(
38-
list(self.df.index) * len(self.df.columns), dtype="object"
39-
)
40-
self.col_labels_all = np.array(
41-
list(self.df.columns) * len(self.df.index), dtype="object"
42-
)
43-
44-
def time_frame_fancy_lookup(self):
45-
self.df.lookup(self.row_labels, self.col_labels)
46-
47-
def time_frame_fancy_lookup_all(self):
48-
self.df.lookup(self.row_labels_all, self.col_labels_all)
49-
50-
5131
class Reindex:
5232
def setup(self):
5333
N = 10**3

asv_bench/benchmarks/join_merge.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,6 @@
2222
from pandas import ordered_merge as merge_ordered
2323

2424

25-
class Append:
26-
def setup(self):
27-
self.df1 = DataFrame(np.random.randn(10000, 4), columns=["A", "B", "C", "D"])
28-
self.df2 = self.df1.copy()
29-
self.df2.index = np.arange(10000, 20000)
30-
self.mdf1 = self.df1.copy()
31-
self.mdf1["obj1"] = "bar"
32-
self.mdf1["obj2"] = "bar"
33-
self.mdf1["int1"] = 5
34-
self.mdf1 = self.mdf1._consolidate()
35-
self.mdf2 = self.mdf1.copy()
36-
self.mdf2.index = self.df2.index
37-
38-
def time_append_homogenous(self):
39-
self.df1.append(self.df2)
40-
41-
def time_append_mixed(self):
42-
self.mdf1.append(self.mdf2)
43-
44-
4525
class Concat:
4626

4727
params = [0, 1]

doc/redirects.csv

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,6 @@ generated/pandas.DataFrame.aggregate,../reference/api/pandas.DataFrame.aggregate
315315
generated/pandas.DataFrame.align,../reference/api/pandas.DataFrame.align
316316
generated/pandas.DataFrame.all,../reference/api/pandas.DataFrame.all
317317
generated/pandas.DataFrame.any,../reference/api/pandas.DataFrame.any
318-
generated/pandas.DataFrame.append,../reference/api/pandas.DataFrame.append
319318
generated/pandas.DataFrame.apply,../reference/api/pandas.DataFrame.apply
320319
generated/pandas.DataFrame.applymap,../reference/api/pandas.DataFrame.applymap
321320
generated/pandas.DataFrame.as_blocks,../reference/api/pandas.DataFrame.as_blocks
@@ -408,7 +407,6 @@ generated/pandas.DataFrame.last,../reference/api/pandas.DataFrame.last
408407
generated/pandas.DataFrame.last_valid_index,../reference/api/pandas.DataFrame.last_valid_index
409408
generated/pandas.DataFrame.le,../reference/api/pandas.DataFrame.le
410409
generated/pandas.DataFrame.loc,../reference/api/pandas.DataFrame.loc
411-
generated/pandas.DataFrame.lookup,../reference/api/pandas.DataFrame.lookup
412410
generated/pandas.DataFrame.lt,../reference/api/pandas.DataFrame.lt
413411
generated/pandas.DataFrame.mask,../reference/api/pandas.DataFrame.mask
414412
generated/pandas.DataFrame.max,../reference/api/pandas.DataFrame.max
@@ -917,7 +915,6 @@ generated/pandas.Series.aggregate,../reference/api/pandas.Series.aggregate
917915
generated/pandas.Series.align,../reference/api/pandas.Series.align
918916
generated/pandas.Series.all,../reference/api/pandas.Series.all
919917
generated/pandas.Series.any,../reference/api/pandas.Series.any
920-
generated/pandas.Series.append,../reference/api/pandas.Series.append
921918
generated/pandas.Series.apply,../reference/api/pandas.Series.apply
922919
generated/pandas.Series.argmax,../reference/api/pandas.Series.argmax
923920
generated/pandas.Series.argmin,../reference/api/pandas.Series.argmin

doc/source/reference/frame.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ Indexing, iteration
6666
DataFrame.keys
6767
DataFrame.iterrows
6868
DataFrame.itertuples
69-
DataFrame.lookup
7069
DataFrame.pop
7170
DataFrame.tail
7271
DataFrame.xs
@@ -250,7 +249,6 @@ Combining / comparing / joining / merging
250249
.. autosummary::
251250
:toctree: api/
252251

253-
DataFrame.append
254252
DataFrame.assign
255253
DataFrame.compare
256254
DataFrame.join

doc/source/reference/series.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,6 @@ Combining / comparing / joining / merging
247247
.. autosummary::
248248
:toctree: api/
249249

250-
Series.append
251250
Series.compare
252251
Series.update
253252

doc/source/user_guide/indexing.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1559,7 +1559,7 @@ For instance:
15591559
df.reindex(cols, axis=1).to_numpy()[np.arange(len(df)), idx]
15601560
15611561
Formerly this could be achieved with the dedicated ``DataFrame.lookup`` method
1562-
which was deprecated in version 1.2.0.
1562+
which was deprecated in version 1.2.0 and removed in version 2.0.0.
15631563

15641564
.. _indexing.class:
15651565

doc/source/whatsnew/v2.0.0.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ Removal of prior version deprecations/changes
267267
- Enforced deprecation changing behavior when passing ``datetime64[ns]`` dtype data and timezone-aware dtype to :class:`Series`, interpreting the values as wall-times instead of UTC times, matching :class:`DatetimeIndex` behavior (:issue:`41662`)
268268
- Removed deprecated :meth:`DataFrame._AXIS_NUMBERS`, :meth:`DataFrame._AXIS_NAMES`, :meth:`Series._AXIS_NUMBERS`, :meth:`Series._AXIS_NAMES` (:issue:`33637`)
269269
- Removed deprecated :meth:`Index.to_native_types`, use ``obj.astype(str)`` instead (:issue:`36418`)
270+
- Removed deprecated :meth:`Series.iteritems`, :meth:`DataFrame.iteritems`, use ``obj.items`` instead (:issue:`45321`)
271+
- Removed deprecated :meth:`DataFrame.lookup` (:issue:`35224`)
272+
- Removed deprecated :meth:`Series.append`, :meth:`DataFrame.append`, use :func:`concat` instead (:issue:`35407`)
270273
- Removed deprecated :meth:`Series.iteritems`, :meth:`DataFrame.iteritems` and :meth:`HDFStore.iteritems` use ``obj.items`` instead (:issue:`45321`)
271274
- Removed deprecated :meth:`DatetimeIndex.union_many` (:issue:`45018`)
272275
- Removed deprecated ``weekofyear`` and ``week`` attributes of :class:`DatetimeArray`, :class:`DatetimeIndex` and ``dt`` accessor in favor of ``isocalendar().week`` (:issue:`33595`)

pandas/core/frame.py

Lines changed: 0 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -4870,69 +4870,6 @@ def _series(self):
48704870
for idx, item in enumerate(self.columns)
48714871
}
48724872

4873-
def lookup(
4874-
self, row_labels: Sequence[IndexLabel], col_labels: Sequence[IndexLabel]
4875-
) -> np.ndarray:
4876-
"""
4877-
Label-based "fancy indexing" function for DataFrame.
4878-
4879-
.. deprecated:: 1.2.0
4880-
DataFrame.lookup is deprecated,
4881-
use pandas.factorize and NumPy indexing instead.
4882-
For further details see
4883-
:ref:`Looking up values by index/column labels <indexing.lookup>`.
4884-
4885-
Given equal-length arrays of row and column labels, return an
4886-
array of the values corresponding to each (row, col) pair.
4887-
4888-
Parameters
4889-
----------
4890-
row_labels : sequence
4891-
The row labels to use for lookup.
4892-
col_labels : sequence
4893-
The column labels to use for lookup.
4894-
4895-
Returns
4896-
-------
4897-
numpy.ndarray
4898-
The found values.
4899-
"""
4900-
msg = (
4901-
"The 'lookup' method is deprecated and will be "
4902-
"removed in a future version. "
4903-
"You can use DataFrame.melt and DataFrame.loc "
4904-
"as a substitute."
4905-
)
4906-
warnings.warn(msg, FutureWarning, stacklevel=find_stack_level())
4907-
4908-
n = len(row_labels)
4909-
if n != len(col_labels):
4910-
raise ValueError("Row labels must have same size as column labels")
4911-
if not (self.index.is_unique and self.columns.is_unique):
4912-
# GH#33041
4913-
raise ValueError("DataFrame.lookup requires unique index and columns")
4914-
4915-
thresh = 1000
4916-
if not self._is_mixed_type or n > thresh:
4917-
values = self.values
4918-
ridx = self.index.get_indexer(row_labels)
4919-
cidx = self.columns.get_indexer(col_labels)
4920-
if (ridx == -1).any():
4921-
raise KeyError("One or more row labels was not found")
4922-
if (cidx == -1).any():
4923-
raise KeyError("One or more column labels was not found")
4924-
flat_index = ridx * len(self.columns) + cidx
4925-
result = values.flat[flat_index]
4926-
else:
4927-
result = np.empty(n, dtype="O")
4928-
for i, (r, c) in enumerate(zip(row_labels, col_labels)):
4929-
result[i] = self._get_value(r, c)
4930-
4931-
if is_object_dtype(result):
4932-
result = lib.maybe_convert_objects(result)
4933-
4934-
return result
4935-
49364873
# ----------------------------------------------------------------------
49374874
# Reindexing and alignment
49384875

@@ -9560,118 +9497,6 @@ def infer(x):
95609497
# ----------------------------------------------------------------------
95619498
# Merging / joining methods
95629499

9563-
def append(
9564-
self,
9565-
other,
9566-
ignore_index: bool = False,
9567-
verify_integrity: bool = False,
9568-
sort: bool = False,
9569-
) -> DataFrame:
9570-
"""
9571-
Append rows of `other` to the end of caller, returning a new object.
9572-
9573-
.. deprecated:: 1.4.0
9574-
Use :func:`concat` instead. For further details see
9575-
:ref:`whatsnew_140.deprecations.frame_series_append`
9576-
9577-
Columns in `other` that are not in the caller are added as new columns.
9578-
9579-
Parameters
9580-
----------
9581-
other : DataFrame or Series/dict-like object, or list of these
9582-
The data to append.
9583-
ignore_index : bool, default False
9584-
If True, the resulting axis will be labeled 0, 1, …, n - 1.
9585-
verify_integrity : bool, default False
9586-
If True, raise ValueError on creating index with duplicates.
9587-
sort : bool, default False
9588-
Sort columns if the columns of `self` and `other` are not aligned.
9589-
9590-
.. versionchanged:: 1.0.0
9591-
9592-
Changed to not sort by default.
9593-
9594-
Returns
9595-
-------
9596-
DataFrame
9597-
A new DataFrame consisting of the rows of caller and the rows of `other`.
9598-
9599-
See Also
9600-
--------
9601-
concat : General function to concatenate DataFrame or Series objects.
9602-
9603-
Notes
9604-
-----
9605-
If a list of dict/series is passed and the keys are all contained in
9606-
the DataFrame's index, the order of the columns in the resulting
9607-
DataFrame will be unchanged.
9608-
9609-
Iteratively appending rows to a DataFrame can be more computationally
9610-
intensive than a single concatenate. A better solution is to append
9611-
those rows to a list and then concatenate the list with the original
9612-
DataFrame all at once.
9613-
9614-
Examples
9615-
--------
9616-
>>> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])
9617-
>>> df
9618-
A B
9619-
x 1 2
9620-
y 3 4
9621-
>>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y'])
9622-
>>> df.append(df2)
9623-
A B
9624-
x 1 2
9625-
y 3 4
9626-
x 5 6
9627-
y 7 8
9628-
9629-
With `ignore_index` set to True:
9630-
9631-
>>> df.append(df2, ignore_index=True)
9632-
A B
9633-
0 1 2
9634-
1 3 4
9635-
2 5 6
9636-
3 7 8
9637-
9638-
The following, while not recommended methods for generating DataFrames,
9639-
show two ways to generate a DataFrame from multiple data sources.
9640-
9641-
Less efficient:
9642-
9643-
>>> df = pd.DataFrame(columns=['A'])
9644-
>>> for i in range(5):
9645-
... df = df.append({'A': i}, ignore_index=True)
9646-
>>> df
9647-
A
9648-
0 0
9649-
1 1
9650-
2 2
9651-
3 3
9652-
4 4
9653-
9654-
More efficient:
9655-
9656-
>>> pd.concat([pd.DataFrame([i], columns=['A']) for i in range(5)],
9657-
... ignore_index=True)
9658-
A
9659-
0 0
9660-
1 1
9661-
2 2
9662-
3 3
9663-
4 4
9664-
"""
9665-
warnings.warn(
9666-
"The frame.append method is deprecated "
9667-
"and will be removed from pandas in a future version. "
9668-
"Use pandas.concat instead.",
9669-
FutureWarning,
9670-
stacklevel=find_stack_level(),
9671-
)
9672-
9673-
return self._append(other, ignore_index, verify_integrity, sort)
9674-
96759500
def _append(
96769501
self,
96779502
other,

0 commit comments

Comments
 (0)