Search code examples
pythonpandaspandas-loc

Setting value to a dataframe using df.loc updates a copy of the dataframe


import pandas as pd

#Inserting some data into name_df 

list_name = ["Al","Brad"]  
list_age = [20,30]

name_df = pd.DataFrame(list_name,columns=["name"])  
age_df = pd.DataFrame(list_age,columns=["age"])

name_df = pd.concat([name_df,age_df],axis=1)

**#Make a copy of the dataframe**  
copy_df = name_df  

**#Editing the data in name_df**  
name_df.loc[name_df["name"]=="Brad", ["age"]] = 35

**#Change appears in copy_df**  
print(copy_df)

Is this supposed to happen?


Solution

  • Make a copy. (copy.deepcopy())

    import pandas as pd
    import copy 
    list_name = ["Al","Brad"]  
    list_age = [20,30]
    
    name_df = pd.DataFrame(list_name,columns=["name"])  
    age_df = pd.DataFrame(list_age,columns=["age"])
    
    name_df = pd.concat([name_df,age_df],axis=1)
    
    copy_df = copy.deepcopy(name_df)  
    
    name_df.loc[name_df["name"]=="Brad", ["age"]] = 35
    
    print(copy_df)