Więcej
Ustaw wartość dla konkretnej komórki w pandas DataFrame używając indeksu
I've utworzył Pandas DataFrame
df = DataFrame(index=['A','B','C'], columns=['x','y'])
i dostałem to
x y A NaN NaN B NaN NaN C NaN NaN
Następnie chcę przypisać wartość do konkretnej komórki, np. dla wiersza 'C' i kolumny 'x'. Spodziewałem się uzyskać taki wynik:
x y A NaN NaN B NaN NaN C 10 NaN
z tym kodem:
df.xs('C')['x'] = 10
ale zawartość df
nie uległa zmianie. To znowu tylko NaN
w DataFrame.
Jakieś sugestie?
391
3
Odpowiedź RukTecha,
df.set_value('C', 'x', 10)
, jest o wiele szybsza niż opcje, które zaproponowałem poniżej. Jednakże, został on został zlikwidowany.Idąc dalej, zalecaną metodą jest
.iat/.at
.Dlaczego
df.xs('C')['x']=10
nie działa:?df.xs('C')
domyślnie zwraca nową ramkę danych z kopią danych, więcmodyfikuje tylko tę nową ramkę danych.
df['x']
zwraca widok ramki danychdf
, więcmodyfikuje samą
df
.Ostrzeżenie: Czasami trudno jest przewidzieć, czy operacja zwraca kopię czy widok. Z tego powodu docs zalecają unikanie przypisań z "indeksowaniem łańcuchowym".
Tak więc zalecaną alternatywą jest
który dokładnie modyfikuje
df
.Aktualizacja: Metoda
.set_value
będzie zdeprecjonowana..iat/.at
są dobrymi zamiennikami, niestety pandas dostarcza mało dokumentacjiNajszybszym sposobem na zrobienie tego jest użycie set_value. Ta metoda jest ~100 razy szybsza niż metoda
.ix
. Na przykład:df.set_value('C', 'x', 10)
.Zalecanym sposobem (według opiekunów) na ustawienie wartości jest:
Użycie 'chained indexing' (
df['x']['C']
) może prowadzić do problemów.Zobacz: