2016-03-17 16 views
5

Najpierw tworzę nową ramkę DataFrame. Następnie utwórz nową ramkę2, filtrując niektóre dane z ramki. Teraz chcę, aby przypisać pewne wartości do frame2:Ustawienia pand UstawieniaWithCopyOstrzeżenie po wypróbowaniu .loc

import numpy as np 
from pandas import DataFrame 

frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'], columns=['Ohio', 'Texas', 'California']) 
mask = frame['Texas'] > 1 
print frame[mask] 
frame2 = frame.loc[mask] 
frame2.loc['c', 'Ohio'] = 'me' 
print frame2 

ale mam to ostrzeżenie:

C:\Python27\lib\site-packages\pandas\core\indexing.py:461: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead 

dlaczego Ciągle mam to ostrzeżenie, chociaż użyłem zalecaną składnię .LOC? co mam zrobić, aby uniknąć tego ostrzeżenia?

+0

wydaje się, że znalazłem jedno możliwe rozwiązanie na stronie: http://stackoverflow.com/questions/23688307/settingwithcopywarning-even-when-using-loc. czy ktoś ma inne dobre pomysły? – Osora

+0

Jaki jest twój zamiar? Czy chcesz zaktualizować kopię lub oryginalny df – EdChum

+0

@EdChum Chcę zaktualizować kopię. – Osora

Odpowiedz

4

Zmiana

frame2 = frame.loc[mask] 

do

frame2 = frame.loc[mask].copy() 

eliminuje to ostrzeżenie.

+0

Świetnie! To działa! Dziękuję ~! O (∩_∩) O – Osora

+0

Nie ma za co. Powodzenia! –