Skip to content

Add fix to raise error when category value 'x' is not predefined but is assigned through df.loc[..]=x #34011

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

Closed
Closed
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
4487bec
Add fix to raise error when category value is not predefined
chrispe May 5, 2020
10098ab
Fix linting
chrispe May 5, 2020
cb34580
Added new test
chrispe May 5, 2020
1622663
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe May 16, 2020
c627fa6
Add test case for unused categories
chrispe May 16, 2020
ba3a751
Remove trailing whitespace
chrispe May 16, 2020
51dcdfe
Fix linting
chrispe May 16, 2020
9057b26
Fix linting
chrispe May 16, 2020
06fdc3e
Remove temporary fix from generic.py
chrispe May 23, 2020
8c8f794
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe May 23, 2020
582c023
First fix try through indexing.py
chrispe May 24, 2020
730fc2b
Fix lint
chrispe May 24, 2020
c275eb9
Fix import ordering
chrispe May 24, 2020
944ae24
Fix Update
chrispe May 24, 2020
8372bdb
Fix lint
chrispe May 24, 2020
0e5e418
Include more related test cases
chrispe May 24, 2020
eea359a
Fix linting
chrispe May 24, 2020
5f72d4e
Update test_indexing.py
chrispe May 24, 2020
781322a
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 8, 2020
26f474b
import missing dtypes function
chrispe Oct 8, 2020
215943e
Fix linting
chrispe Oct 8, 2020
5bacde9
Include requested changes
chrispe Oct 10, 2020
96e4318
Fix import ordering/format
chrispe Oct 10, 2020
993be66
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 10, 2020
42d968b
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 11, 2020
e7ce246
Update test_categorical.py
chrispe Oct 11, 2020
31ef609
Fix format
chrispe Oct 11, 2020
ce3f463
Remove commas
chrispe Oct 11, 2020
a825269
Update test_categorical.py
chrispe Oct 11, 2020
3816789
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 12, 2020
8651d25
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 17, 2020
72726a0
Update solution
chrispe Oct 17, 2020
0f738c3
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 17, 2020
51e2032
Fix lint
chrispe Oct 17, 2020
7d64357
Fix format issues
chrispe Oct 17, 2020
d68f215
Update indexing.py
chrispe Oct 17, 2020
5ea8ab1
Update indexing.py
chrispe Oct 18, 2020
b08efc1
Update indexing.py
chrispe Oct 18, 2020
69f4e62
Update test_categorical.py
chrispe Oct 18, 2020
4c33040
Update concat.py
chrispe Oct 18, 2020
e936736
Update cast.py
chrispe Oct 18, 2020
8031f8f
Update cast.py
chrispe Oct 18, 2020
1e1c094
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Oct 18, 2020
c889b1b
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Nov 4, 2020
c08c6c0
Update test_categorical.py
chrispe Nov 4, 2020
e6c3a4c
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Nov 28, 2020
c862d99
Revert previous approach and include concat changes
chrispe Nov 28, 2020
5baa314
Remove non-required convertion
chrispe Nov 28, 2020
cb5d8e4
Update concat.py
chrispe Nov 28, 2020
7d7da20
Update concat.py
chrispe Nov 28, 2020
ecad50f
Update cast.py
chrispe Dec 6, 2020
ab5af93
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Dec 6, 2020
0c6b68a
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Jan 21, 2021
4197a74
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Feb 13, 2021
4bc05c6
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Feb 15, 2021
af5e141
Add new version with raise
chrispe Feb 15, 2021
6d45570
Add format fixes
chrispe Feb 15, 2021
31612ed
Update test_categorical.py
chrispe Feb 15, 2021
4a2a8e8
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Feb 17, 2021
dd7e3ca
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Feb 20, 2021
6d9e667
Update
chrispe Feb 20, 2021
e0da655
Use prio_cat_dtype only for EAs
chrispe Feb 20, 2021
92d1f14
Revert usage of first_ea
chrispe Feb 20, 2021
9b9b382
Fix mypy errors
chrispe Feb 20, 2021
d3df994
Use unique1d in _cast_to_common_type
chrispe Feb 20, 2021
41aa9e3
Fix isort error
chrispe Feb 20, 2021
ca0eb1f
Renamed input variable for find_common_type
chrispe Feb 20, 2021
e2cfb79
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Mar 7, 2021
931d6c8
Remove new argument in find_common_type
chrispe Mar 7, 2021
8065ddb
Add check to _get_common_dtype
chrispe Mar 13, 2021
5d533dd
Merge branch 'master' of https://github.com/pandas-dev/pandas into fi…
chrispe Mar 13, 2021
b21326b
Update dtypes.py
chrispe Mar 13, 2021
335fc06
Update dtypes.py
chrispe Mar 13, 2021
950dcc4
Update dtypes.py
chrispe Mar 13, 2021
2ee1df8
Update dtypes.py
chrispe Mar 13, 2021
17120f0
Test
chrispe Mar 13, 2021
439b49f
Add flag in get_common_type
chrispe Mar 13, 2021
c6e3435
Revert
chrispe Mar 13, 2021
fc40817
Update dtypes.py
chrispe Mar 13, 2021
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
14 changes: 14 additions & 0 deletions pandas/core/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
ensure_str,
is_bool,
is_bool_dtype,
is_categorical_dtype,
is_datetime64_any_dtype,
is_datetime64tz_dtype,
is_dict_like,
Expand Down Expand Up @@ -5228,6 +5229,19 @@ def __setattr__(self, name: str, value) -> None:
After regular attribute access, try setting the name
This allows simpler access to columns for interactive use.
"""
# Fix for handling assignment to a Catagorical dtype
# with a category which is not predefined.
if isinstance(value, BlockManager) and is_categorical_dtype(self):
if len(value) > 0:
new_value = value.as_array()[-1]
else:
new_value = None
if not pd.isna(new_value) and new_value not in self.dtype.categories.values:
raise ValueError(
"Cannot setitem on a Categorical with a new "
"category, set the categories first"
)

# first try regular attribute access via __getattribute__, so that
# e.g. ``obj.x`` and ``obj.x = 4`` will always reference/modify
# the same attribute.
Expand Down
16 changes: 16 additions & 0 deletions pandas/tests/arrays/categorical/test_indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,22 @@ def test_where_ordered_differs_rasies(self):
with pytest.raises(ValueError, match="without identical categories"):
ser.where([True, False, True], other)

def test_loc_new_category_raises(self):
ser = pd.Series(Categorical(["a", "b", "c"]))
msg = "Cannot setitem on a Categorical with a new category"
with pytest.raises(ValueError, match=msg):
ser.loc[3] = "d"

def test_unused_category_retention(self):
# Init case
exp_cats = Index(["a", "b", "c", "d"])
cat1 = Series(Categorical(["a", "b", "c"], categories=exp_cats))
tm.assert_index_equal(cat1.cat.categories, exp_cats)

# Modify case
cat1.loc[0] = "b"
tm.assert_index_equal(cat1.cat.categories, exp_cats)


@pytest.mark.parametrize("index", [True, False])
def test_mask_with_boolean(index):
Expand Down