Quais regras o Pandas usa para gerar uma visão versus uma cópia?
Estou confuso sobre as regras que o Pandas usa ao decidir que uma seleção de um dataframe é uma cópia do dataframe original ou uma exibição no original.
Se eu tiver, por exemplo,
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Eu entendo que umquery
retorna uma cópia para que algo como
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
não terá efeito no quadro de dados original,df
. Também entendo que fatias escalares ou nomeadas retornam uma exibição, para que atribuições a elas, como
df.iloc[3] = 70
ou
df.ix[1,'B':'E'] = 222
vai mudardf
. Mas estou perdido quando se trata de casos mais complicados. Por exemplo,
df[df.C <= df.B] = 7654321
alterardf
, mas
df[df.C <= df.B].ix[:,'B':'E']
não.
Existe uma regra simples que o Pandas está usando e que estou perdendo? O que está acontecendo nesses casos específicos; e, em particular, como altero todos os valores (ou um subconjunto de valores) em um dataframe que atenda a uma consulta específica (como estou tentando fazer no último exemplo acima)?
Nota: Não é o mesmo queessa questão; e eu lia documentação, mas não sou iluminado por ele. Também li as perguntas "Relacionadas" sobre este tópico, mas ainda estou perdendo a regra simples que o Pandas está usando e como a aplicaria para - por exemplo - modificar os valores (ou um subconjunto de valores) em um quadro de dados que atenda a uma consulta específica.