Home > front end >  Dict of DataFrames
Dict of DataFrames

Time:01-13

Let's say I initialize a df and then I assign it to a dict 3 times, each one with a specific key.

import pandas as pd

df = pd.DataFrame({'A': [2, 2], 'B': [2, 2]})

dict = {}

for i in range(3):
    dict_strat['Df {0}'.format(i)] = df

Alright, what I'm not understanding is that when I try to change value of one element in the dictionary, it changes all the others. For example:

dict_strat['Df 0'].iloc[0, :] = 9

It not only changes the first df on the dict, it changes all of them. Why? How can I get rid of that?

CodePudding user response:

The DataFrames are all shallow copies, meaning that mutating one of them will mutate the others in the dictionary.

To resolve this issue, make deep copies using .copy(). You also should be using f-strings rather than .format():

for i in range(3):
    dict_strat[f'Df {i}'] = df.copy()

CodePudding user response:

what you do is a shallow copy you need to do a deep copy. you can use df.copy()

dict_strat['Df {0}'.format(i)] = df.copy()
  • Related