2016-06-15 24 views
11

Mam pandasową ramkę danych: dane. ma kolumn [ "nazwa", 'A', 'b']Prawidłowy sposób ustawiania wartości plasterka w pandach

co chcę zrobić (i działa) jest:

d2 = data[data['name'] == 'fred'] #This gives me multiple rows 
d2['A'] = 0 

Spowoduje to ustawienie kolumny A w wierszach Fred 0 . robiłem też:

indexes = d2.index 
data['A'][indexes] = 0 

jednak zarówno dać mi ten sam ostrzeżenie:

/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/core/indexing.py:128: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame 

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 

Jak pandy mam robić jes s?

Odpowiedz

30

Jest to bardzo częste ostrzeżenie od pand. Oznacza to, że piszesz w plasterku, a nie w oryginalnych danych, więc może nie mieć zastosowania do oryginalnych kolumn z powodu mylącego przypisanego przydziału. Przeczytaj tę post. Zawiera szczegółową dyskusję na temat tego SettingWithCopyWarning. W twoim przypadku myślę, że możesz wypróbować:

data.loc[data['name'] == 'fred', 'A'] = 0 
+1

Już miałem opublikować to samo. Logiczny "jeden liniowiec" jest lepszy niż niepotrzebne linie. – tnknepp

+0

Masz rację. Dzięki za przypomnienie. –

+1

Czy nie istnieje prosty sposób na zwrócenie nowego pliku df z edytowanymi kolumnami i pozostawienie oryginału bez zmian? – user48956

Powiązane problemy