Issue 1:
Document removed deprecations, originally indicated in #6581. This reference is in reverse chronological order of release.

1.0.0

#16994 inplace arg to .set_axis() (0.21.0) (#27525)

#17739 .get_value() and .set_value() (0.21.0) (#27377)

#22264 list-likes IN str.cat (0.24.0) (#27611)

#19339 IntervalIndex.from_intervals (0.23.0) #27793

#29608 support for nested renamers in aggregate

#23592 tm.assert_raises_regex (0.24.0) (#29174)

#23739 keep_tz=False in DatetimeIndex.to_series (0.24.0) (#29731)

#19751 factorize(order=) kwarg (0.23.0) (#29732)

#22672 FrozenNDArray.searchsorted signature (v → value) (0.24.0) (#29732)

#23585 raise_conflic kwarg replaced by errors in .update() (0.24.0) (#29732)

#22458 Index.shift n in favor of periods (0.24.0) (#29732)

#18836 skip_footer in pd.read_excel (0.23.0) (#29721)

#18902 convert_datetime64 in DataFrame.to_records (0.23.0) (#29721)

#23053 nthreads arg in read_feather (0.24.0) (#29728)

#18458 DataFrame/Series.as_matrix (0.23.0) (#29720)

#18258 Series.from_array (0.23.0) (#29720)

#18477 .asobject (0.23.0) (#29720)

#17656 DataFrame.blocks, DataFrame.as_blocks() (0.21.0) (#29720)

#18529 DataFrame.from_items (0.23.0) (#29720)

#18627 tseries.plotting.tsplot (0.23.0) (#29726)

#21400 encoding arg in read_stata (0.24.0) (#29722)

#18577 broadcast & reduce kwarg in .apply() (0.23.0) (#29730)

#23917 pd.types.is_period, pd.types.is_datetimetz (0.24.0) (#29744)

#18800 Series.valid (0.23.0) (#29724)

#18812 .is_copy (0.23.0) (#29724)

#18243 .get_ftype_counts() (0.23.0) (#29724)

#20239 .get_duplicates() (0.23.0) (#29724)

#24203 Series.clip_lower, Series.clip_upper, DataFrame.clip_lower and DataFrame.clip_upper (0.24.0) (#29724)

#23601 ExtensionArray._formatting_values (0.24.0) (#27774)

#19239/#26137 SparseSeries, SparseDataFrame (0.25) (#28425)

#19434 dtype arg in make_block_same_klass (0.23.0) (#29723)

#19265 fastpath arg in Block (0.23.0) (#29723)

#18217 Index.summary() (0.23.0) (#29819

#23635 passing an int for usecols in read_excel (0.24.0) (#29795)

#20772 .freq setting on a datetimelike index (0.23.0) (#29801)

#20730 DatetimeIndex.offset (0.23.0) (#29801)

#23752 MultiIndex constructor kwarg labels, and .set_lables() deprecated in favor of codes (0.24.0) (#29766)

#21613 MultiIndex.to_hierarachial (0.24.0) (#29766)

#20613 pd.concat(...., sort=) (0.23.0) (#29786)

#21036 floordiv integer ndarray and Timedelta (0.23.0) (#29797)

#21896 Series.to_csv signature changes (0.24.0) (#29809)

#20584 Series.rolling.applyetc for the raw parameter (0.23.0) (#29829)

#23110 fastpath keyword in Index constructors (0.24.0) (#29725)

#23539 allowing datetime64 data passed to TimedeltaIndex (0.24.0) (#29794)

#23937 allowing timedelta64 data passed to DatetimeIndex (0.24.0) (#29794)

#26744 DataFrame.ftypes, Series.ftype (0.25.0) (#29895)

#24050 lib.infer_dtype(...., skipna=None (0.24.0) (#29876)

#24751 Series.cat.categorical (0.24.0) (#29914)

#18164 DTI.weekday_name and .dt.weekday_nam (0.23.0) (#29831)

#22644 from Timestamp.tz_localize, DatetimeIndex.tz_localize, Series.dt.tz_localize remove errors keyword, replaced by nonexistent / ambiguous (0.24.0) (#29911)

#26839 change Timedelta.resolution to Timedelta.resolution_string (0.25.0) (#29910)

#18731 listifying tuples for groupby (0.23.0) (#29755)

#20841 Categorical.take default behaviour with -1 (0.23.0) (#29912)

#23990 passing dtype alias to DatetimeTZDtype(unit) parameter (0.24.0) (#29927)

#24114 Categorical where casting to object (0.24.0) (#29913)

#23396 FrozenNDArray (0.24.0) (#29840)

#10726 DataFrame.sort_index by keyword (0.17.0) (#29931)

#17295 reindexing for not-found in .loc (0.21.0) (#29802)

#17758 non-existant keys in MultiIndex (xref to #17295 for Index) (0.23.0) (#29802)

#17295 non-existant columns in .to_excel() & non-existant keys in .loc (0.21.0) (#29802)

#20721 .base, .flags, .stride, .itemsize, .data Series/Index attributes (0.23.0) (#29918)

#26684 DataFrame & Seriesto_dense/to_sparse (0.25.0) (#29900)

#27106 Index.dtype_str (0.25.0) (#29900)

#27199 Categorical.ravel should return a Categorical and not ndarray (0.25.0) (#29900)

#27145 .get_dtype_counts (0.25.0) (#29900)

#24694 .fillna(integer) with timedelta (0.24.0) (#29875)

#20995 passing multiple axes to DataFrame.dropna (0.23.0) (#29875)

#24048 Series.nonzero (0.24.0) (#29875)

#21775 Catetgorical.from_codes accepting float codes (0.24.0) (#29875)

#23621 passing tz and a datetime.datetime/Timestamp with tzinfo in the Timestamp constructor (0.24.0) (#29929)

#23919 verify_integrity arg in TimedeltaIndex, DatetimeIndex (0.24.0) (#29930)

#23919 passing start, end, periods to DatetimeIndex or TimedeltaIndex (0.24.0) (#29930)

#24157 time_rule kwarg in offsets.generate_range (0.24.0) (#24157)

#23767 Series.str.partition and Series.str.rpartition, replace pat with sep (0.24.0) (#29986)

#27106 Series.put (0.25.0) (#29986)

#27106 Series.real & Series.imag (0.25.0) (#29986)

#26409 Categorical.get_values, SparseArray.get_values, DataFrame.get_values, Series.get_values, Index.get_values (0.25.0) (#29989)

#26409 SparseArray.values (0.25.0) (#29989)

#18307 pandas.tseries.converter.register (???) (#30003)

#???? pandas.plottting._matplotlib.hist._grouped_plot "figsize" kwarg (???) (#30003)

#???? PlotAccessor keyword-only arguments (???) (#30003)

#19980 pandas.plotting._timeseries.tsplot (0.23.0) (#30003)

#26405 Series/DataFrame.compound (0.25) (#30088)

#22318 join_axes kwarg in pd.concat (0.25.0) (#30090)

#???? set_axis signature (0.21.0) (#30089)

#27198 ufunc.outer(Series) (0.25.0) (#30104)

#24486 box arg in pd.to_datetime (0.25.0) (#30111)

#24559 i8data for DTI (0.24.0) (#30115)

#16955 Series.argmin/argmax (0.21.0) (#30113)

#22535 integer add/sub with DatetimeIndex, TimedeltaIndex, PeriodIndex, Timestamp, Period (0.24.0) (#30117)

#23264 Y, M in Timedelta and friends (0.25.0) (#30118)

#???? Index.contains (0.25.0) (#30103)

#???? how,fill_method kwargs in resample (??? older than Feb 2016) (#30139)

#26403 ordered=None in CategoricalDtype in favor of ordered=False (0.25.0) (#29955)

#9493 remove deprecated StataReader.data method (???) (#30176)

#17328 remove deprecated "index" keyword from read_stata, StataReader, StataReader.read (???) (#30176)

#24806 passing non-nano dtype to TimedeltaIndex/DatetimeIndex (0.24.0) (#30199)

#15113/#26438 .ix (0.20.0 / DeprecationWarning), (0.25.0 FutureWarning) (#27620)

#27103 pd.to_msgpack and pd.read_msgpack (0.25.0) (#30112)

#27112 Series.item & Index.item (0.25.0) (#30175)

#20613 DataFrame.append "sort" keyword default change None to False (0.23.0) (#30251)

#21614 `Series.ptp (0.24.0) (#30458)

#21930 Series.compress (0.24.0) (#30514)

0.25.0

#15601 / #19247Panel (0.20.0) (#27101 et al)

#15931 .agg(..) for groupby/rolling/resample with a renaming dict (0.20.0) (depends on #18366 for a proper replacement) (#26399)

#19269 / #19373 pandas.core.categorial move (0.23.0) (#25655)

#16942 pd.TimeGrouper (0.21.0) (#26477)

#16442, #20938 ExcelWriter.sheetname (0.21.0, 0.23.0) (#26464)

#17703 pd.TimeGrouper (0.21.0) (#26477)

#16488 ExcelWriter.parse_cols (0.21.0) (#26522)

#16970 pd.options.html.display (0.21.0) (#26540)

#16915 convert_objects(0.21.0), xref #11221, #11173 (initial deprecation) (#26612)

#17633 Series.select, DataFrame.select (0.21.0) (#26641)

#17842 reindex_axis (0.21.0)

#17842 mappers for rename_axis (0.21.0)

#17982 cat.rename_categories with a Series as list-like (0.21.0)

#17812 .from_csv() (0.21.0)

#17820 tupleize_cols in read_csv (0.21.0)

#17877 tupleize_cols in to_csv (0.21.0)

#17774 .read_excel(..., parse_cols) (0.21.0)

#17744 .where/.mask(..., raise_on_error) (0.21.0)

#17742 .astype(...., categories=, ordered=) (0.21.0)

#17691 cdate_range (0.21.0)

#17493 SeriesGroupBy.nth, for dropna=True (0.21.0) (#27168)

#17352 .take(..., convert=) param (0.21.0) (#27171)

#17346 duplicate elements in names for read_csv (0.21.0) (#27175)

#21359 compare datetime.datetime and datetime.date (0.23.0) (#27109)

0.24.0

#10892 Deprecate LongPanel/WidePanel (0.17.0), aliases since < 0.11.0 (#15748, #15802 revert); waiting on statsmodels 0.9.0 release (#18341)

pandas.core.datetools, deprecated in 0.19.0 (3f3839b) (#19119)

#14432 ambiguous name in level/column when grouping (#22415)

#14645 Series.repeat(reps) (0.20.0) (#22417)

#14645 Index.repeat(n) and MultiIndex.repeat(n) (#22574)

#15257 the as_indexer keyword in str.match() (0.20.0) (#22626)

#14645 Categorical.searchsorted(v) and Series.searchsorted(v) (#22670)

#14645 TimedeltaIndex.searchsorted(key), DatetimeIndex.searchsorted(key), and PeriodIndex.searchsorted(key) (#22670)

#15537 pandas.json (#22737)

#14686 SparseArray.to_dense(fill) (0.20.0) (#22910)

#14686 SparseSeries.to_dense(sparse_only) (0.20.0) (#22910)

#14967 .astype(raise_on_error) (0.20.0) (#23374)

#15099 Series.sortlevel and DataFrame.sortlevel (0.20.0) (#23375)

#15358 import of concat from pandas.tools.merge (#23376)

#16005 top-level scatter_matrix and plot_params + plotting methods in pandas.tools.plotting (0.20.0) (#23376)

#15501 .consolidate (0.20.0) (#23377)

#15537 pandas.parser, pandas.lib, pandas.tslib (0.20.0) (#23378)

#15538 pd.pnow(), pd.match(), pd.groupby(), pd.Expr, pd.Term (0.20.0) (#23380)

#15940 pd.get_store() (0.20.0) (#23380)

#16157 pandas.computation.expressions.set_use_numexpr() (0.20.0) (#23386)

#16157 pandas.types.concat.union_categorical() (0.20.0) (#23386)

#16250 shims for util and test (0.20.0) (#23386)

#16189 pandas.api.types.is_sequence (0.20.0) (#23390)

#16163 pandas.api.types.is_any_int_dtype, is_floating_dtype (0.20.0) (#23390)

#15987 .astype(np.datetime64) and .astype(np.timedelta64), unit-less astypes (0.20.0) (#23392)

0.23.0

#11603 freq, how keywords (0.18.0) (#18601)

#13706 pivot_annual (0.19.0) (#18370)

#13739 isleapyear (0.19.0) (#18370)

#13358 pd.ordered_merge -> pd.merge_ordered (0.19.0) (#18459)

#11603 freq from .rolling/.expanding (#18601)

#11603 how from .rolling/.expanding (#18668)

#13735 import errors for io.data and io.wb (0.19.0, but deprecated in 0.17.0) (#18612)

#14007 SparseList (0.19.0) (#18621)

#13854 Categorical.from_array (0.19.0) (#18642)

#13386 skip_footer in pd.read_csv (0.19.0) (#18724)

#13373 as_recarray in pd.read_csv (0.19.0) (#18804)

#13360 compact_ints and use_unsigned in pd.read_csv (0.19.0) (#18851)

#13593 .freq in Timestamp rather than .offset (0.19.0) (#18927)

#13012 Series.reshape and Categorical.reshape (0.19.0) (#18954)

#11603 pd.rolling_*, pd.expanding_*, pd.ewm* (0.18.0); waiting on dask release (#18723)

#13874 pandas.tseries.frequencies.get_standard_freq & to_offset freqstr kw (0.19.0) (#19023)

#13776 Panel4D\Panelnd (0.19.0) (#19059)

#19107 display.line_width and display.height

Categorical.labels (#19120)

flavor parameter of SQLiteDatabase (8acfad3) (#19121)

str.extract(expand=None) (67730dd) (#19118)

#16223 pandas.tools.hashing, pandas.util.hashing (0.20.0) (#19181)

#13147 pandas.core.common dtype introspection functions (0.19.0) #19769

resample compat #20554

axis=None param in .replace() #20789

0.21.0

#10967 remove ExcelWriter.has_index_names (0.17.0) (PR #16522)

#12882 Categorical.sort (0.18.1) (PR #16728)

#12190 options.display.mpl_style (0.18.0) (PR #16761)

#12591 Index.sym_diff (0.18.1) (PR #16760)

#11149 pd.eval change inplace=False rather than inplace=None (0.18.0) (PR #16732)

#11834 get_offset_name removed (0.18.0) (PR #16863)

#2881 pd.options.display.line_width (PR #16993)

#3663 pd.options.display.height (PR #16993)

0.20.0

#10890 remove TimeSeries alias (0.17.0) (PR #15098)

#11135 remove Series.is_timeseries (0.17.0) (PR #15098)

#11308 pandas.io.ga (0.17.1) -> (PR #15223)

#11898 pd.fama_macbeth, pd.ols, can also remove statsmodels as a dep (0.18.0), (PR #15353)

#10711 .irow, .icol, .iget_value (from 0.11.0, but deprecated in 0.17.0) (PR #15547)

#10711 DataFrame.iterkv (pretty old, but changed DeprecationWarning to FutureWarning only in 0.17) (PR #15650)

#10632 Categorical.name (0.17.0) (PR #15654)

#11121 generate_bq_schema remove as no longer needed (0.17.0) (PR #15484)

#10458 testing.assert_isinstance (0.17.0) (PR #15652)

#10236take_last kw of duplicated and drop_duplicates (0.17.0) (#15710)

#10920take_last kw of Series.nlargest and nsmallest (0.17.0) (#15710)

#10792 take_last kw of Groupby.nlargest/nsmallest(0.17.0) (#15710)

#10726 Series.order,sort, Index.order, DataFrame.sort (0.17.0) (#15735)

#12027 back-compat for where with non-strings in .select(...., where=) for HDFStore (0.11.0/0.18.0) (##15798)

#10735 combineAdd / combineMult (0.17.0) (#15805)

#10748 Deprecate having np.nan in Categorical.categories (0.17.0) (#15806)

0.19.0

Deprecate colSpace in favor of col_space (no issue, commit 4a5a677) (PR #13857)

#8227 '+'/'-' for Index set ops (0.15.0) -> #14127

#9094 make DTI-DTI subtraction yield a TimeDeltaIndex (rather then a set op .difference()) (0.16.0) -> #14164

#9357, #3445 remove trellis plot. (0.16.0) (PR #13855)

#6910 Change Panel.shift's signature to match generic.shift()'s (0.14.0) -> #14041

flavor='mysql' in to_sql (0.14.0) -> #13611)

tquery/uquery functions (0.14.0) -> #13616

#11274 engine kw in to_csv(), from 0.13 (0.17.1), #13419

#8376 remove .levels from Categorical constructor / accessor (0.15.0), #13612

#8486 remove outtype in .to_dict() replaced by orient (0.15.0), #13627

#8227 diff for Index set ops (0.15.0), #13669

#10951 Legacy offsets (0.17.0) (#13590)

#9615 remove pandas.sandbox (0.16.0), #13670

#9611, remove ability to set cat.ordered directly (0.16.0), #13671

#11157 SparsePanel (0.17.0), #13778

#6919 Remove copy keyword from xs,minor_xs,major_xs (4 places) (0.14.0), #13781

#10085 remove return_type='series'|'frame' (replaced by expand=) (0.16.1), #13701

to_wide deprecated since 2011 (1134c9f) -> #14039

boxplot #7096 (0.14.0) (#12216)

change default of return_type from None to 'axes'

update return_type section in visualization.rst

0.18

#4950 - rolling_corr_pairwise(), expanding_corr_pairwise() replace by rolling_corr(), expanding_corr() (0.14.0), in #11603

#6680, cols was deprecated in DataFrame.to_duplicated and drop_duplicates (0.14.0), #12165

#6292, sql functions (#12205)

#6930 factorize took an order argument but didn't do anything with it. (0.14.0) (#12274)

#4892 Float indexers in non-float indexes. (0.14.0) (#12246)

encoding items (in favor of locs) in msgpack (#10623) (0.17.0) (#12129)

0.17

Deprecate colSpace in favor of col_space (no issue, commit 4a5a677) (0.8.0 I think) -> Removed #10890

#2304 Deprecate broadcasting TimeSeries along DataFrame index (0.10.0) -> Removed #10890

#5231 na_last arg from Series.sort (0.14.0) -> Removed #10726

#7088 Deprecate percentile_width in favor of percentiles (0.14.0) -> Removed in #10881

#3787 Deprecate load and save in favor of pickle and to_pickle (0.12.0) -> Removed #10892

#4853, #4864 Deprecate timeRule and offset in favor of freq () (0.13.0) -> Removed #10892

#4713 Remove kind from read_excel (0.13.0) -> Removed #10892

#4770, #7032 Deprecate infer_types to have no effect (0.13.0) -> Removed #10892

#4645 Deprecate table keyword in HDFStore (0.13.0) -> Removed #10892

0.16

#5505, DataFrame.pivot_table and crosstab were refactored to use the same arguments as pivot (index and columns) and FutureWarnings added for the old arguments. Per @jreback, in 0.16, these deprecated arguments should be removed and the docstring updated. This issue is submitted as a reminder to do so and should be tagged with a 0.156 milestone.

#6686, cols was deprecated in DataFrame.to_excel and to_csv (rows is not deprecated, don't touch it!)

#8140, remove covert_dummies from core/reshape entirely. Deprecated in favor of enhanced get_dummies. Deprecated as of 0.15

#8481, remove pandas.tools.util.py/value_range

0.15

DataFrame.delevel already deprecated in (0.7)

Issue 2:
update for 2019-10-07: We have a StringDtype extension dtype. It's memory model is the same as the old implementation, an object-dtype ndarray of strings. The next step is to store & process it natively.

xref #8627

xref #8643, #8350

Since we introduced Categorical in 0.15.0, I think we have found 2 main uses.

as a 'real' Categorical/Factor type to represent a limited of subset of values that the column can take on

as a memory saving representation for object dtypes.

I could see introducting a dtype='string' where String is a slightly specialized sub-class of Categroical, with 2 differences compared to a 'regular' Categorical:

it allows unions of arbitrary other string types, currently Categorical will complain if you do this:

In [1]: df = DataFrame({'A' : Series(list('abc'),dtype='category')})
In [2]: df2 = DataFrame({'A' : Series(list('abd'),dtype='category')})
In [3]: pd.concat([df,df2])
ValueError: incompatible levels in categorical block merge

Note that this works if they are Series (and prob should raise as well, side -issue)

But, if these were both 'string' dtypes, then its a simple matter to combine (efficiently).

you can restrict the 'sub-dtype' (e.g. the dtype of the categories) to string/unicode (iow, don't allow numbers / arbitrary objects), makes the constructor a bit simpler, but more importantly, you now have a 'real' non-object string dtype.

I don't think this would be that complicated to do. The big change here would be to essentially convert any object dtypes that are strings to dtype='string' e.g. on reading/conversion/etc. might be a perf issue for some things, but I think the memory savings greatly outweigh.

We would then have a 'real' looking object dtype (and object would be relegated to actual python object types, so would be used much less).

cc @shoyer

cc @JanSchulz

cc @jorisvandenbossche

cc @mwiebe

thoughts?