Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEPR: ftype, ftypes #29895

Merged
merged 1 commit into from
Nov 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions doc/redirects.csv
Original file line number Diff line number Diff line change
Expand Up @@ -357,10 +357,8 @@ generated/pandas.DataFrame.from_csv,../reference/api/pandas.DataFrame.from_csv
generated/pandas.DataFrame.from_dict,../reference/api/pandas.DataFrame.from_dict
generated/pandas.DataFrame.from_items,../reference/api/pandas.DataFrame.from_items
generated/pandas.DataFrame.from_records,../reference/api/pandas.DataFrame.from_records
generated/pandas.DataFrame.ftypes,../reference/api/pandas.DataFrame.ftypes
generated/pandas.DataFrame.ge,../reference/api/pandas.DataFrame.ge
generated/pandas.DataFrame.get_dtype_counts,../reference/api/pandas.DataFrame.get_dtype_counts
generated/pandas.DataFrame.get_ftype_counts,../reference/api/pandas.DataFrame.get_ftype_counts
generated/pandas.DataFrame.get,../reference/api/pandas.DataFrame.get
generated/pandas.DataFrame.get_value,../reference/api/pandas.DataFrame.get_value
generated/pandas.DataFrame.get_values,../reference/api/pandas.DataFrame.get_values
Expand Down Expand Up @@ -883,10 +881,8 @@ generated/pandas.Panel.first_valid_index,../reference/api/pandas.Panel.first_val
generated/pandas.Panel.floordiv,../reference/api/pandas.Panel.floordiv
generated/pandas.Panel.from_dict,../reference/api/pandas.Panel.from_dict
generated/pandas.Panel.fromDict,../reference/api/pandas.Panel.fromDict
generated/pandas.Panel.ftypes,../reference/api/pandas.Panel.ftypes
generated/pandas.Panel.ge,../reference/api/pandas.Panel.ge
generated/pandas.Panel.get_dtype_counts,../reference/api/pandas.Panel.get_dtype_counts
generated/pandas.Panel.get_ftype_counts,../reference/api/pandas.Panel.get_ftype_counts
generated/pandas.Panel.get,../reference/api/pandas.Panel.get
generated/pandas.Panel.get_value,../reference/api/pandas.Panel.get_value
generated/pandas.Panel.get_values,../reference/api/pandas.Panel.get_values
Expand Down Expand Up @@ -1223,11 +1219,8 @@ generated/pandas.Series.flags,../reference/api/pandas.Series.flags
generated/pandas.Series.floordiv,../reference/api/pandas.Series.floordiv
generated/pandas.Series.from_array,../reference/api/pandas.Series.from_array
generated/pandas.Series.from_csv,../reference/api/pandas.Series.from_csv
generated/pandas.Series.ftype,../reference/api/pandas.Series.ftype
generated/pandas.Series.ftypes,../reference/api/pandas.Series.ftypes
generated/pandas.Series.ge,../reference/api/pandas.Series.ge
generated/pandas.Series.get_dtype_counts,../reference/api/pandas.Series.get_dtype_counts
generated/pandas.Series.get_ftype_counts,../reference/api/pandas.Series.get_ftype_counts
generated/pandas.Series.get,../reference/api/pandas.Series.get
generated/pandas.Series.get_value,../reference/api/pandas.Series.get_value
generated/pandas.Series.get_values,../reference/api/pandas.Series.get_values
Expand Down
1 change: 0 additions & 1 deletion doc/source/reference/frame.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ Attributes and underlying data
:toctree: api/

DataFrame.dtypes
DataFrame.ftypes
DataFrame.get_dtype_counts
DataFrame.select_dtypes
DataFrame.values
Expand Down
2 changes: 0 additions & 2 deletions doc/source/reference/series.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ Attributes
Series.array
Series.values
Series.dtype
Series.ftype
Series.shape
Series.nbytes
Series.ndim
Expand All @@ -43,7 +42,6 @@ Attributes
Series.flags
Series.empty
Series.dtypes
Series.ftypes
Series.data
Series.name
Series.put
Expand Down
1 change: 1 addition & 0 deletions doc/source/whatsnew/v1.0.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,7 @@ or ``matplotlib.Axes.plot``. See :ref:`plotting.formatters` for more.
- Removed the previously deprecated :meth:`Series.valid`; use :meth:`Series.dropna` instead (:issue:`18800`)
- Removed the previously properties :attr:`DataFrame.is_copy`, :attr:`Series.is_copy` (:issue:`18812`)
- Removed the previously deprecated :meth:`DataFrame.get_ftype_counts`, :meth:`Series.get_ftype_counts` (:issue:`18243`)
- Removed the previously deprecated :meth:`DataFrame.ftypes`, :meth:`Series.ftypes`, :meth:`Series.ftype` (:issue:`26744`)
- Removed the previously deprecated :meth:`Index.get_duplicated`, use ``idx[idx.duplicated()].unique()`` instead (:issue:`20239`)
- Removed the previously deprecated :meth:`Series.clip_upper`, :meth:`Series.clip_lower`, :meth:`DataFrame.clip_upper`, :meth:`DataFrame.clip_lower` (:issue:`24203`)
- Removed the ability to alter :attr:`DatetimeIndex.freq`, :attr:`TimedeltaIndex.freq`, or :attr:`PeriodIndex.freq` (:issue:`20772`)
Expand Down
57 changes: 1 addition & 56 deletions pandas/core/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,7 @@ class NDFrame(PandasObject, SelectionMixin):
]
_internal_names_set: Set[str] = set(_internal_names)
_accessors: Set[str] = set()
_deprecations: FrozenSet[str] = frozenset(
["get_dtype_counts", "get_values", "ftypes", "ix"]
)
_deprecations: FrozenSet[str] = frozenset(["get_dtype_counts", "get_values", "ix"])
_metadata: List[str] = []
_is_copy = None
_data: BlockManager
Expand Down Expand Up @@ -5582,10 +5580,6 @@ def dtypes(self):
pandas.Series
The data type of each column.

See Also
--------
DataFrame.ftypes : Dtype and sparsity information.

Examples
--------
>>> df = pd.DataFrame({'float': [1.0],
Expand All @@ -5603,55 +5597,6 @@ def dtypes(self):

return Series(self._data.get_dtypes(), index=self._info_axis, dtype=np.object_)

@property
def ftypes(self):
"""
Return the ftypes (indication of sparse/dense and dtype) in DataFrame.

.. deprecated:: 0.25.0
Use :func:`dtypes` instead.

This returns a Series with the data type of each column.
The result's index is the original DataFrame's columns. Columns
with mixed types are stored with the ``object`` dtype. See
:ref:`the User Guide <basics.dtypes>` for more.

Returns
-------
pandas.Series
The data type and indication of sparse/dense of each column.

See Also
--------
DataFrame.dtypes: Series with just dtype information.

Notes
-----
Sparse data should have the same dtypes as its dense representation.

Examples
--------
>>> arr = np.random.RandomState(0).randn(100, 4)
>>> arr[arr < .8] = np.nan
>>> pd.DataFrame(arr).ftypes
0 float64:dense
1 float64:dense
2 float64:dense
3 float64:dense
dtype: object
"""
warnings.warn(
"DataFrame.ftypes is deprecated and will "
"be removed in a future version. "
"Use DataFrame.dtypes instead.",
FutureWarning,
stacklevel=2,
)

from pandas import Series

return Series(self._data.get_ftypes(), index=self._info_axis, dtype=np.object_)

def _to_dict_of_blocks(self, copy=True):
"""
Return a dict of dtype -> Constructor Types that
Expand Down
12 changes: 0 additions & 12 deletions pandas/core/internals/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ class BlockManager(PandasObject):

get_dtype_counts
get_dtypes
get_ftypes

apply(func, axes, block_filter_fn)

Expand Down Expand Up @@ -251,10 +250,6 @@ def get_dtypes(self):
dtypes = np.array([blk.dtype for blk in self.blocks])
return algos.take_1d(dtypes, self._blknos, allow_fill=False)

def get_ftypes(self):
ftypes = np.array([blk.ftype for blk in self.blocks])
return algos.take_1d(ftypes, self._blknos, allow_fill=False)

def __getstate__(self):
block_values = [b.values for b in self.blocks]
block_items = [self.items[b.mgr_locs.indexer] for b in self.blocks]
Expand Down Expand Up @@ -1546,19 +1541,12 @@ def dtype(self):
def array_dtype(self):
return self._block.array_dtype

@property
def ftype(self):
return self._block.ftype

def get_dtype_counts(self):
return {self.dtype.name: 1}

def get_dtypes(self):
return np.array([self._block.dtype])

def get_ftypes(self):
return np.array([self._block.ftype])

def external_values(self):
return self._block.external_values()

Expand Down
40 changes: 1 addition & 39 deletions pandas/core/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,7 @@ class Series(base.IndexOpsMixin, generic.NDFrame):
_deprecations = (
base.IndexOpsMixin._deprecations
| generic.NDFrame._deprecations
| frozenset(
["compress", "valid", "ftype", "real", "imag", "put", "ptp", "nonzero"]
)
| frozenset(["compress", "valid", "real", "imag", "put", "ptp", "nonzero"])
)

# Override cache_readonly bc Series is mutable
Expand Down Expand Up @@ -418,42 +416,6 @@ def name(self, value: Optional[Hashable]) -> None:
raise TypeError("Series.name must be a hashable type")
self.attrs["name"] = value

@property
def ftype(self):
"""
Return if the data is sparse|dense.

.. deprecated:: 0.25.0
Use :func:`dtype` instead.
"""
warnings.warn(
"Series.ftype is deprecated and will "
"be removed in a future version. "
"Use Series.dtype instead.",
FutureWarning,
stacklevel=2,
)

return self._data.ftype

@property
def ftypes(self):
"""
Return if the data is sparse|dense.

.. deprecated:: 0.25.0
Use :func:`dtypes` instead.
"""
warnings.warn(
"Series.ftypes is deprecated and will "
"be removed in a future version. "
"Use Series.dtype instead.",
FutureWarning,
stacklevel=2,
)

return self._data.ftype

@property
def values(self):
"""
Expand Down
4 changes: 3 additions & 1 deletion pandas/io/pytables.py
Original file line number Diff line number Diff line change
Expand Up @@ -2641,7 +2641,9 @@ def write(self, **kwargs):
"cannot write on an abstract storer: sublcasses should implement"
)

def delete(self, where=None, start=None, stop=None, **kwargs):
def delete(
self, where=None, start: Optional[int] = None, stop: Optional[int] = None
):
"""
support fully deleting the node in its entirety (only) - where
specification must be None
Expand Down
48 changes: 1 addition & 47 deletions pandas/tests/frame/test_dtypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,63 +46,33 @@ def test_concat_empty_dataframe_dtypes(self):
assert result["b"].dtype == np.float64
assert result["c"].dtype == np.float64

def test_empty_frame_dtypes_ftypes(self):
def test_empty_frame_dtypes(self):
empty_df = pd.DataFrame()
tm.assert_series_equal(empty_df.dtypes, pd.Series(dtype=np.object))

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
tm.assert_series_equal(empty_df.ftypes, pd.Series(dtype=np.object))

nocols_df = pd.DataFrame(index=[1, 2, 3])
tm.assert_series_equal(nocols_df.dtypes, pd.Series(dtype=np.object))

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
tm.assert_series_equal(nocols_df.ftypes, pd.Series(dtype=np.object))

norows_df = pd.DataFrame(columns=list("abc"))
tm.assert_series_equal(
norows_df.dtypes, pd.Series(np.object, index=list("abc"))
)

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
tm.assert_series_equal(
norows_df.ftypes, pd.Series("object:dense", index=list("abc"))
)

norows_int_df = pd.DataFrame(columns=list("abc")).astype(np.int32)
tm.assert_series_equal(
norows_int_df.dtypes, pd.Series(np.dtype("int32"), index=list("abc"))
)
# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
tm.assert_series_equal(
norows_int_df.ftypes, pd.Series("int32:dense", index=list("abc"))
)

odict = OrderedDict
df = pd.DataFrame(odict([("a", 1), ("b", True), ("c", 1.0)]), index=[1, 2, 3])
ex_dtypes = pd.Series(
odict([("a", np.int64), ("b", np.bool), ("c", np.float64)])
)
ex_ftypes = pd.Series(
odict([("a", "int64:dense"), ("b", "bool:dense"), ("c", "float64:dense")])
)
tm.assert_series_equal(df.dtypes, ex_dtypes)

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
tm.assert_series_equal(df.ftypes, ex_ftypes)

# same but for empty slice of df
tm.assert_series_equal(df[:0].dtypes, ex_dtypes)

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
tm.assert_series_equal(df[:0].ftypes, ex_ftypes)

def test_datetime_with_tz_dtypes(self):
tzframe = DataFrame(
{
Expand Down Expand Up @@ -474,22 +444,6 @@ def test_dtypes_gh8722(self, float_string_frame):
result = df.dtypes
tm.assert_series_equal(result, Series({0: np.dtype("int64")}))

def test_ftypes(self, mixed_float_frame):
frame = mixed_float_frame
expected = Series(
dict(
A="float32:dense",
B="float32:dense",
C="float16:dense",
D="float64:dense",
)
).sort_values()

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
result = frame.ftypes.sort_values()
tm.assert_series_equal(result, expected)

def test_astype_float(self, float_frame):
casted = float_frame.astype(int)
expected = DataFrame(
Expand Down
12 changes: 0 additions & 12 deletions pandas/tests/series/test_combine_concat.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,32 +290,20 @@ def test_concat_empty_series_dtypes(self):
)
assert result.dtype == "Sparse[float64]"

# GH 26705 - Assert .ftype is deprecated
with tm.assert_produces_warning(FutureWarning):
assert result.ftype == "float64:sparse"

result = pd.concat(
[Series(dtype="float64").astype("Sparse"), Series(dtype="float64")]
)
# TODO: release-note: concat sparse dtype
expected = pd.SparseDtype(np.float64)
assert result.dtype == expected

# GH 26705 - Assert .ftype is deprecated
with tm.assert_produces_warning(FutureWarning):
assert result.ftype == "float64:sparse"

result = pd.concat(
[Series(dtype="float64").astype("Sparse"), Series(dtype="object")]
)
# TODO: release-note: concat sparse dtype
expected = pd.SparseDtype("object")
assert result.dtype == expected

# GH 26705 - Assert .ftype is deprecated
with tm.assert_produces_warning(FutureWarning):
assert result.ftype == "object:sparse"

def test_combine_first_dt64(self):
from pandas.core.tools.datetimes import to_datetime

Expand Down
8 changes: 0 additions & 8 deletions pandas/tests/series/test_dtypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,6 @@ def test_dtype(self, datetime_series):
assert datetime_series.dtype == np.dtype("float64")
assert datetime_series.dtypes == np.dtype("float64")

# GH 26705 - Assert .ftype is deprecated
with tm.assert_produces_warning(FutureWarning):
assert datetime_series.ftype == "float64:dense"

# GH 26705 - Assert .ftypes is deprecated
with tm.assert_produces_warning(FutureWarning):
assert datetime_series.ftypes == "float64:dense"

@pytest.mark.parametrize("value", [np.nan, np.inf])
@pytest.mark.parametrize("dtype", [np.int32, np.int64])
def test_astype_cast_nan_inf_int(self, dtype, value):
Expand Down