Ta linia zwraca pierwsze 4 wiersze w ramce danych combined
dlafeature_a
combined.iloc[0:4]["feature_a"]
Zgodnie z oczekiwaniami ten następny wiersz zwraca 2., 4. i 16. wiersz w ramce danych dla kolumny feature_a
:
combined.iloc[[1,3,15]]["feature_a"]
Linia ta wyznacza pierwsze 4 wiersze w dataframe do feature_a
celu 77
.
combined.iloc[0:4]["feature_a"] = 77
Ta linia coś robi. Działają pewne obliczenia, ponieważ ich zastosowanie do dłuższej listy trwa dłużej.
combined.iloc[[1,3,15]]["feature_a"] = 88
Wiersze 2, 4 i 16 nie są ustawione, 88
gdy są zaznaczone:
combined.iloc[[1,3,15]]["feature_a"]
Jak ustawić dowolną listę wierszy kolumny ramki danych na wartość bez konieczności masowego objazdu kodowania?
Wydaje się, że ten scenariusz powinien być prosty i powszechny.
Odpowiedzi:
Jeśli odwrócisz selektory i wybierzesz najpierw według kolumny, będzie działać dobrze:
Kod:
Dlaczego?
Kiedy zrobiłeś pierwszy (niedziałający sposób) wybierasz niesąsiadującą sekcję ramki danych. Powinieneś otrzymać ostrzeżenie:
Wynika to z faktu, że odbywają się dwie niezależne operacje.
combined.iloc[[1,3,15]]
tworzy nową ramkę danych złożoną tylko z trzech wierszy, a ramka jest koniecznie kopiowana. następnie...["feature_a"]
ale zostanie ona wybrana względem kopii.Tak więc zadanie przechodzi do kopii. Istnieją różne sposoby rozwiązania tego problemu, ale w tym przypadku łatwiej (i taniej) jest najpierw wybrać kolumnę, a następnie wybrać części kolumn do przypisania.
Kod testowy:
Wyniki:
źródło