ChainedAssignmentError when adding a conditional to a pandas dataframe

1 week ago 11
ARTICLE AD BOX

I keep getting a ChainedAssignmentError when adding a conditional to my code. In this basic example I am checking to see if column "one" is an "e" and if so then set the "Match" column to 1.

The df is getting updated correctly, I am just getting the FutureWarning.

import pandas as pd df = pd.DataFrame([list('ab0'), list('ee0'), list('ij0'), list('ii0')], columns=['one', 'two', 'Match']) print(df) df.loc[:,"Match"][df.loc[:,"one"] == "e"] = 1 print(df)

OUTPUT

one two Match 0 a b 0 1 e e 0 2 i j 0 3 i i 0 FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. A typical example is when you are setting values in a column of a DataFrame, like: df["col"][row_indexer] = value Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy one two Match 0 a b 0 1 e e 1 2 i j 0 3 i i 0
Read Entire Article