2016-04-07 12 views
0

Die documentation und zahlreiche SO-Antworten verdeutlichen, dass die Zuordnung zu einem "untergeordneten" DataFrame im "übergeordneten" DataFrame (abhängig von einigen Bedingungen) widergespiegelt werden kann oder nicht.Zuordnen zu übergeordneten Datenrahmen wirkt sich auf untergeordneten Datenrahmen aus?

Was die entgegengesetzte Situation: ist es wahr, dass auf die „Eltern“ Dataframe zuweisen kann oder nicht in dem „Kind“ Dataframe (n) reflektiert werden, und es hängt von den exakt gleichen Bedingungen?

Ich bemerkte, dass SettingWithCopy Warnung scheint nicht bei der Zuweisung an die "Eltern" DataFrame ausgelöst werden; noch ist dies in der Dokumentation diskutiert.

df_parent = pd.DataFrame({'a': [2,2,3,3], 'b': range(4)}) 
df_child = df_parent[df_parent['a']==2] 
df_child.loc[0,'a'] = 100 # `SettingWithCopy` warning 
df_parent.loc[0, 'a'] = 1000 # no warning; but unclear if df_child is updated? 
+0

Was ist 'df_child'? Sie definieren es nicht in Ihrem Beispiel. – BrenBarn

+0

@BrenBarn oops behoben. – max

Antwort

0

aus der Dokumentation:

Alle Pandas Datenstrukturen sind wert wandelbar (die Werte, die sie enthalten verändert werden kann), aber nicht immer größenveränderlich. Die Länge einer Serie kann nicht geändert werden, aber z. B. können Spalten in einen DataFrame eingefügt werden. Die große Mehrheit der Methoden erzeugt jedoch neue Objekte und belassen die Eingabedaten unberührt. Im Allgemeinen bevorzugen wir jedoch Immutability wo sinnvoll.

es "arbeitet" in beide Richtungen:

In [83]: df 
Out[83]: 
    a b c 
0 0 9 5 
1 9 1 5 
2 7 0 0 
3 3 6 9 
4 4 0 8 
5 4 5 8 
6 1 3 6 
7 4 4 9 
8 6 7 4 
9 2 9 6 

In [84]: copy.ix[0,'a'] = 100 

In [85]: copy 
Out[85]: 
    a b c 
0 100 9 5 
1 9 1 5 
2 7 0 0 
3 3 6 9 
4 4 0 8 
5 4 5 8 
6 1 3 6 
7 4 4 9 
8 6 7 4 
9 2 9 6 

In [86]: df 
Out[86]: 
    a b c 
0 100 9 5 
1 9 1 5 
2 7 0 0 
3 3 6 9 
4 4 0 8 
5 4 5 8 
6 1 3 6 
7 4 4 9 
8 6 7 4 
9 2 9 6 

Verwendung .copy() wenn Sie eine unabhängige Kopie Ihrer DF wollen:

In [89]: df 
Out[89]: 
    a b c 
0 3 4 2 
1 9 5 1 
2 1 9 0 

In [90]: copy = df.copy() 

In [91]: df.ix[0,'a'] = 100 

In [92]: df 
Out[92]: 
    a b c 
0 100 4 2 
1 9 5 1 
2 1 9 0 

In [93]: copy 
Out[93]: 
    a b c 
0 3 4 2 
1 9 5 1 
2 1 9 0 
+0

Ich vermute keine 'SettingWithCopy'-Warnung, weil der Eltern-DF nicht wirklich weiß, welcher Child-DF mit ihm verknüpft ist. – max

Verwandte Themen