2016-04-07 17 views
0

documentation ve sayısız SO yanıtları, bir "alt" DataFrame atamasının "ana" DataFrame'e (bazı koşullara bağlı olarak) yansıtılabileceğini veya yansıtmayabileceğini açıklığa kavuşturur.Ebeveyn DataFrame'e atama, çocuk DataFrame'i etkiler mi?

ne zıt durum hakkında: o "üst" DataFrame için atama veya "çocuk" DataFrame (ler) yansıtılması veya olmayabilir doğrudur ve tam aynı koşullar bağlıdır?

"Ebeveyn" DataFrame'e atandığında SettingWithCopy uyarısının yükseltilemediğini fark ettim; ne de belgelerinde tartışılmaktadır. belgelere

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

'Ne df_child' edilir? Bunu kendi örneğinizde tanımıyorsunuz. – BrenBarn

+0

@BrenBarn oops düzeltildi. – max

cevap

0

:

tüm panda veri yapıları değer değişken (bunlar değiştirilebilir içeren değerleri), ancak her zaman değil, boyut kesilebilir. Serisinin uzunluğu değiştirilemez, ancak örneğin sütunlar DataFrame'e eklenebilir. Bununla birlikte, yöntemlerin büyük çoğunluğu yeni nesneler üretir ve giriş verilerini el değmeden bırakır. Genel olarak, biz mantıklı olan değişmezlik lehine isteriz. Her iki yönde

o " çalışır":

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 

kullanım .copy() size DF bağımsız kopyasını istiyorsanız:

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

"SettingWithCopy" uyarısı yok, çünkü ana DF aslında hangi DF'nin kendisine bağlı olduğunu bilmiyor. – max

İlgili konular