Ho un po 'di problemi a modificare un DataFrame panda duplicato e non ho le modifiche valide per entrambi i duplicati e il DataFrame originale.DataFrame.apply in Python panda altera entrambi i DataFrames originali e duplicati
Ecco un esempio. Di 'creo un dataframe arbitrario da un elenco di dizionari:
In [67]: d = [{'a':3, 'b':5}, {'a':1, 'b':1}]
In [68]: d = DataFrame(d)
In [69]: d
Out[69]:
a b
0 3 5
1 1 1
Poi ho assegnare la 'd' dataframe a 'e' variabile e applicare un po' di matematica arbitraria a colonna 'un' utilizzando applica:
In [70]: e = d
In [71]: e['a'] = e['a'].apply(lambda x: x + 1)
il problema sorge in quanto la funzione di applicare si applica a quanto pare sia il duplicato dataframe 'e' e originale dataframe 'd', che non posso per la vita di me a capire:
In [72]: e # duplicate DataFrame
Out[72]:
a b
0 4 5
1 2 1
In [73]: d # original DataFrame, notice the alterations to frame 'e' were also applied
Out[73]:
a b
0 4 5
1 2 1
ho cercato b la documentazione di panda e Google per un motivo per cui sarebbe così, ma senza successo. Non riesco a capire cosa sta succedendo qui.
Ho anche provato le operazioni matematiche utilizzando un'operazione basata sull'elemento (ad es., e['a'] = [i + 1 for i in e['a']]
), ma il problema persiste. C'è una stranezza nel tipo DataFrame panda di cui non sono a conoscenza? Apprezzo qualsiasi intuizione che qualcuno potrebbe essere in grado di offrire.
E proprio quando pensavo di ottenere una presa decente su Python! Grazie mille per la risposta. Questo è un grande aiuto. – MikeGruz
Perché doesnt b = a.copy() funziona? qual è il lavoro intorno .. – Merlin
Non capisco cosa intendi con "perché non funziona". Funziona. Forse sei confuso dai nomi delle variabili? Ho detto 'e = d.copy()' perché quelli erano i nomi usati nella domanda originale. – BrenBarn