DEPR: Series/DataFrame.append (#35407)
State: closed

- [x] closes #35407 (adds deprecation warning)
- [x] closes #22957 
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry


Labels:
name: Deprecate
description: Functionality to remove in pandas

Comments:
Thanks for the suggestions. I've tried to address them. Could you re-review and let me know your feedback? Cheers!
Question on the failing web and docs: looking at the failing doc build, some of the cases are due to direct calls to append, which I can change into concat. But others are indirect, e.g. `doc/source/info_tutorials/getting_started/02_read_write.rst` calls titanic.info() on a DataFrame, which calls frame.memory_usage which calls series.append. In such cases, it's probably preferred to change the series.append into a concat in frame.memory_usage? Or should I just add an `:okwarning:` to the ipython codeblock?
no all usages should be changes in tests and docs except those we r explicitly doing
@jreback Just to make sure I don't misunderstand: given that frame.memory_usage is neither in doc nor test, I shouldn't change the call to series.append to concat there, but instead add a :okwarning: to the ipython codeblock? And likewise not change any other instances were append is called in the pandas code that's neither documentation nor test?
no u do not add okwarning anywhere 

u need to fix this for example in the code not to output a warning (as this is tested in many tests)
when you push pls merge master 
Yes, will do!
I think @jbrockmendel 's suggestion

> this looks very nearly cut/paste from DataFrame.append. the only difference is that we actually have tests for DataFrame.append. If this code has to exist somewhere, then we might as well just implement DataFrame._append so we can adapt the existing tests (and im guessing the scope of DataFrame._append would be narrower so once the deprecation is enforced we could rip out a bunch of it)

makes a lot of sense.

So, this would mean:
- rename `append` to `_append`
- inside `append`, just raise a future warning and then call `_append`
- when `append` is used in internal code, replace it with `_append`
- when `append` is used in user-facing code (e.g. docs), replace it with `concat`
?

@neinkeinkaffee apologies, this has ended up being a lot more work than I'd anticipated when I suggested the issue. However, hopefully you're finding it to be worthwhile!
+1 on @jbrockmendel suggestion
I find it absolutely worthwhile, thanks @MarcoGorelli. 

Thanks everyone for your comments and patience, really appreciated!


@neinkeinkaffee can you merge master
closes #22957?
@jreback I've changed the docs and removed the part about adding rows in-place. However, the Database / Linux_py38_IO pipeline currently fails with `pytest: command not found`, while the Azure pipelines (pandas-dev.pandas Windows py38_np18_2 and Windows py39_2), fail because of a DeprecationWarning that gets raised in `pandas/tests/io/parser/test_header.py::test_no_header_prefix[pyarrow]`, which doesn't appear to be related to the changes I've made. Is this something known or should I dig into it?
@neinkeinkaffee if you can merge master again; just want to get a clean run here. we do have some occasional test failures on CI (though some recent PRs do address some of these)
thanks @neinkeinkaffee yep very nice!